2017-09-17 69 views
0

在部署我的Rails API應用的Heroku,我的體型與下面的錯誤而失敗:的Rails在Heroku:NameError:未初始化不斷ApplicationPolicy

-----> Detecting rake tasks 
sh: 2: Syntax error: Unterminated quoted string 
sh: 2: Syntax error: Unterminated quoted string 
! 
!  Could not detect rake tasks 
!  ensure you can run `$ bundle exec rake -P` against your app 
!  and using the production group of your Gemfile. 
!  rake aborted! 
!  NameError: uninitialized constant ApplicationPolicy 
/tmp/build_64dbe116b1bd38f520ae98d49690e476/sdotapi-86210153dc2b588aa7b0dc9a60799f5090c76f46/app/policies/user_setting_policy.rb:1:in `<top (required)>' 

現在的問題是,我沒有看到這個NameError我的本地開發框錯誤。這似乎暗示,我的Pundit策略的路徑不會在Heroku上加載,而是在本地機器上發生。但我不知道爲什麼:

這裏是我的application.rb的相關部分的樣子:

config.autoload_paths << Rails.root.join('lib') 
Dir[Rails.root.join('app/policies/*.rb')].each &method(:require) 

所在行的錯誤是:

class UserSettingPolicy < ApplicationPolicy 

這兩個政策文件都在app/policies

任何關於可能發生的事情的想法都將被超級讚賞!

+0

檢查你的github存儲庫中的那一行,你確定你沒有提交git之前推送給heroku不同的東西? –

+0

@FabrizioBertoglio就這樣,版本是一樣的。 Github推動Heroku部署,因此使用相同的文件。你認爲可能會發生什麼? – geoboy

+0

'ApplicationPolicy'定義在哪裏?看起來像'rails'沒有找到它。它是爲UserSettingPolicy設置的'super'類,因此rails需要導入該類的所有方法,但它找不到該類。 'ApplicationPolicy'與'Pundit'有關係嗎? –

回答

0

最後發現問題。在上面的代碼中,策略文件逐一加載,因此必須將其更改爲下面的代碼,以便Rails能夠一次加載整個目錄。

config.autoload_paths += Dir[Rails.root.join('app', 'policies', '*.rb')] 
# earlier it was Dir[Rails.root.join('app/policies/*.rb')].each &method(:require) 

在不同的音符,上面的紋路在config/application.rb結束了:

config.autoload_paths += Dir[ 
    Rails.root.join('app', 'policies', '*.rb'), 
    Rails.root.join('app', 'lib', '*.rb') 
] 

通告lib的變化,由於在Rails的自動加載的變化5.在這裏看到更多詳細信息:https://stackoverflow.com/a/40019108

相關問題