Puma:无法加载应用程序:NameError:未初始化的常量

时间:2017-02-27 15:53:44

标签: ruby-on-rails heroku puma

当我尝试将rails应用程序部署到Heroku时,我收到此错误:

Puma starting in single mode...
2017-02-27T15:08:03.908788+00:00 app[web.1]: * Version 3.7.0 (ruby 2.3.1-p112), codename: Snowy Sagebrush
2017-02-27T15:08:03.908789+00:00 app[web.1]: * Min threads: 5, max threads: 5
2017-02-27T15:08:03.908790+00:00 app[web.1]: * Environment: production
2017-02-27T15:08:05.942041+00:00 app[web.1]: ! Unable to load application: NameError: uninitialized constant Api::V1::AController
2017-02-27T15:08:05.942133+00:00 app[web.1]: bundler: failed to load command: puma (/app/vendor/bundle/ruby/2.3.0/bin/puma)
2017-02-27T15:08:05.942266+00:00 app[web.1]: NameError: uninitialized constant Api::V1::AController

Here is the link to the full log

如果我尝试在我的开发环境中运行以下代码,一切正常:

bundle exec puma -C config/puma.rb

我使用-e production标志在本地计算机上运行rails,它运行正常,不会出现错误。只有在我部署到Heroku时才会发生这种情况。

puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
    ActiveRecord::Base.establish_connection
end

我尝试了什么:

  1. 在Heroku上创建了一个新实例,以确保当前实例没有问题
  2. 测试了多个版本的Puma
  3. 选中 development.rb production.rb 以查看不同的内容
  4. 我现在在做什么:

    1. 完成每个提交以查找应用中的更改并尝试查找应用的原因
    2. 我相信我的问题太复杂了......对此有何看法?

2 个答案:

答案 0 :(得分:0)

尝试通过将所有环境变量设置为与Heroku上相同的值,在本地计算机上重现此问题。或者至少设置puma使用的所有变量:

RAILS_ENV=production RACK_ENV=production WEB_CONCURRENCY=1 RAILS_MAX_THREADS=5 bundle exec puma -C config/puma.rb

我也注意到你正在使用线程。这是故意的吗?我的意思是红宝石生态系统并不以螺纹安全着称。尝试将RAILS_MAX_THREADS更改为1并将WEB_CONCURRENCY更高为更高的数字。

答案 1 :(得分:0)

对我来说,该应用程序未使用ActiveRecord,但仍然有对其的引用。由于require "active_record/railtie"已被注释掉,因此生产中断了。