容器化运行Falcon Web Server时遭遇process/metrics依赖加载错误
问题:容器化运行Falcon Web Server时出现process/metrics依赖加载失败
我尝试通过以下Dockerfile构建容器运行Falcon Web Server:
FROM docker.io/library/ruby:3.1.2 AS build-stage COPY Gemfile . COPY Gemfile.lock . RUN bundle install WORKDIR /app COPY . . CMD falcon host
我的falcon.rb配置文件内容如下:
#!/usr/bin/env -S falcon host # frozen_string_literal: true load :rack, :supervisor rack 'localhost' do endpoint Async::HTTP::Endpoint .parse('http://0.0.0.0:3001') end supervisor
启动容器时出现如下错误信息:
{"time":"2022-12-02T14:29:44+00:00","severity":"info","class":"Falcon::Command::Host","oid":2680,"pid":2,"subject":"Falcon::Command::Host","message":"Falcon Host v0.42.3 taking flight!\n- Configuration: falcon.rb\n- To terminate: Ctrl-C or kill 2\n- To reload: kill -HUP 2\n"} /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/service/supervisor.rb:23:in `require': cannot load such file -- process/metrics (LoadError) from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/service/supervisor.rb:23:in `<top (required)>' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/environments/supervisor.rb:23:in `require_relative' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/environments/supervisor.rb:23:in `block in load' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:134:in `instance_eval' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:134:in `block in load' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:127:in `each' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:127:in `load' from /app/falcon.rb:4:in `load_file' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:118:in `instance_eval' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:118:in `load_file' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/configuration.rb:85:in `load_file' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/host.rb:54:in `block in configuration' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/host.rb:52:in `each' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/host.rb:52:in `configuration' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/controller/host.rb:39:in `initialize' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/host.rb:62:in `new' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/host.rb:62:in `controller' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/host.rb:84:in `call' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command/top.rb:105:in `call' from /usr/local/bundle/gems/samovar-2.1.4/lib/samovar/command.rb:36:in `call' from /usr/local/bundle/gems/falcon-0.42.3/lib/falcon/command.rb:30:in `call' from /usr/local/bundle/gems/falcon-0.42.3/bin/falcon:26:in `<top (required)>' from /usr/local/bundle/bin/falcon:25:in `load' from /usr/local/bundle/bin/falcon:25:in `<main>'
该服务在本地环境运行正常,但容器化运行时出现process/metrics依赖加载失败的问题。
解决方案
补充缺失的依赖:Falcon的supervisor组件依赖
process-metricsgem,本地环境可能已手动安装,但容器内仅会安装Gemfile中声明的依赖。在Gemfile中添加gem 'process-metrics',执行bundle install更新Gemfile.lock后重新构建容器。调整Dockerfile工作目录顺序:当前Dockerfile先执行
bundle install再设置WORKDIR,会导致依赖安装路径与应用代码路径不匹配。修改后的Dockerfile如下:
FROM docker.io/library/ruby:3.1.2 AS build-stage WORKDIR /app COPY Gemfile . COPY Gemfile.lock . RUN bundle install COPY . . CMD falcon host
确保bundle install在应用目录下执行,保证依赖路径一致性。
验证依赖完整性:构建容器前,本地执行
bundle check确认所有依赖均已正确声明在Gemfile和Gemfile.lock中,避免容器内依赖缺失。简化配置(可选):如果不需要supervisor功能,可修改falcon.rb去掉相关配置,避免触发依赖加载:
#!/usr/bin/env -S falcon host # frozen_string_literal: true load :rack rack 'localhost' do endpoint Async::HTTP::Endpoint .parse('http://0.0.0.0:3001') end
内容的提问来源于stack exchange,提问作者wolfsblu
相关产品推荐
相关产品推荐

