在将Rails API应用程序部署到Heroku时,我的构建失败了,错误如下:
-----> 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
中。
任何关于可能发生的事情的想法都将是非常感谢的!
发布于 2017-09-17 04:17:22
终于找到问题了。在上面的代码中,策略文件是一个接一个地加载的,因此必须将其更改为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/questions/46259766
复制相似问题