Heroku生产环境升级至heroku-22后Rails部署报fiber加载错误
TLDR; 我在Heroku上运行一个Rails应用,搭建了staging(预发布)和production(生产)环境组成的流水线。由于heroku-18堆栈已终止支持(EOL),正在将应用升级至heroku-22。预发布环境升级正常,但生产环境启动时出现错误:Unable to load application: LoadError: cannot load such file -- fiber
应用进程
- web.1:运行Rails的Puma Web服务器
- worker.1:运行Sidekiq的工作进程
web.1 崩溃日志
heroku[web.1]: Starting process with command `bundle exec puma -p 11167` app[web.1]: [2] Puma starting in cluster mode... app[web.1]: [2] * Puma version: 6.2.2 (ruby 3.2.2-p53) ("Speaking of Now") app[web.1]: [2] * Min threads: 5 app[web.1]: [2] * Max threads: 5 app[web.1]: [2] * Environment: production app[web.1]: [2] * Master PID: 2 app[web.1]: [2] * Workers: 2 app[web.1]: [2] * Restarts: (✔) hot (✖) phased app[web.1]: [2] * Preloading application app[web.1]: [2] ! Unable to load application: LoadError: cannot load such file -- fiber app[web.1]: bundler: failed to load command: puma (/app/vendor/bundle/ruby/3.2.0/bin/puma) app[web.1]: <internal:/app/vendor/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require': cannot load such file -- fiber (LoadError) app[web.1]: from <internal:/app/vendor/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' app[web.1]: from /app/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.8/lib/zeitwerk/kernel.rb:38:in `require' app[web.1]: from /app/vendor/bundle/ruby/3.2.0/gems/actionview-7.0.4.3/lib/action_view/renderer/streaming_template_renderer.rb:3:in `<top (required)>' ...
worker.1 崩溃日志
heroku[worker.1]: Starting process with command `bundle exec sidekiq` heroku[worker.1]: State changed from starting to up app[worker.1]: 2 TID-398 INFO: Booting Sidekiq 4.0.2 with redis options {:url=>"REDACTED", :ssl_params=>{:verify_mode=>0}} app[worker.1]: bundler: failed to load command: sidekiq (/app/vendor/bundle/ruby/3.2.0/bin/sidekiq) app[worker.1]: <internal:/app/vendor/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require': cannot load such file -- fiber (LoadError) app[worker.1]: from <internal:/app/vendor/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' app[worker.1]: from /app/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.8/lib/zeitwerk/kernel.rb:38:in `require' app[worker.1]: from /app/vendor/bundle/ruby/3.2.0/gems/actionview-7.0.4.3/lib/action_view/renderer/streaming_template_renderer.rb:3:in `<top (required)>' ...
环境详情
- ruby 3.2.2
- rails 7.0.4.3
- puma 6.2.2
- sidekiq 4.0.2(暂未升级,不影响web.1启动)
- 预发布与生产环境高度相似,仅生产环境多了newrelic_rpm依赖(该依赖未出现在崩溃调用栈中),资源配置几乎一致。
已尝试的解决方法(均失败后回滚)
- 通过Heroku流水线功能将预发布应用晋升至生产环境
- 用CLI升级生产环境堆栈后手动部署
- 联系Heroku客服
- 设置环境变量
HEROKU_DEBUG_RAILS_RUNNER=1,未获取到额外日志信息 - 部署失败后重启dynos
- 将dynos缩容至0后重新部署再扩容
内容的提问来源于stack exchange,提问作者Antón Morant
相关产品推荐
相关产品推荐

