【问题标题】:Issue with falcon web server when running containerized运行容器化时 falcon Web 服务器出现问题
【发布时间】: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。 (但我建议单独尝试每个修复程序,看看是否只有一个可以解决问题)
  • 成功了,非常感谢!

标签: ruby docker


【解决方案1】:

正如 @anothermhcomments 中指出的那样,解决方案是使用捆绑器在 Dockerfile 中运行 falcon:

CMD bundle exec falcon host

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    相关资源
    最近更新 更多