当我尝试将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
我尝试了什么:
我现在在做什么:
我相信我的问题太复杂了......对此有何看法?
答案 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"
已被注释掉,因此生产中断了。