【发布时间】:2022-12-20 10:49:32
【问题描述】:
我尝试在从这个 Dockerfile 构建的容器中使用 falcon:
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 依赖项存在问题,但我不确定如何解决它。
【问题讨论】:
-
您正在从根目录而不是 /app 运行
bundle install。我猜Gemfile.lock正在容器中被修改,但由于您在运行应用程序时没有使用修改后的文件,因此更改不会反映在您的应用程序中。 -
@anothermh 不幸的是,既没有从应用程序目录运行
bundle install,也没有使用正确的Gemfile.lock解决了问题 -
那么很可能是因为您没有使用
bundle exec调用 falcon,这将使用您的 Gemfile。将CMD falcon host更改为CMD bundle exec falcon host和#!/usr/bin/env -S bundle exec falcon host。 (但我建议单独尝试每个修复程序,看看是否只有一个可以解决问题) -
成功了,非常感谢!