簡體   English   中英

Puma:無法加載應用程序:NameError:未初始化的常量

[英]Puma: Unable to load application: NameError: uninitialized constant

當我嘗試將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

這是完整日志的鏈接

如果我嘗試在我的開發環境上運行以下代碼,則一切正常:

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.rbproduction.rb以查看有什么不同

我現在正在做什么:

  1. 通過每次提交查找應用程序中發生的更改,並嘗試查找導致應用程序的原因

我相信我使問題變得過於復雜...對此有何想法?

通過將所有環境變量設置為與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更改為更高的數字。

對我而言,該應用程序未使用ActiveRecord,但仍然有對其的引用。 因為注釋了require "active_record/railtie" ,所以生產中斷了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM