首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Heroku上的Rails : NameError:未初始化的常数ApplicationPolicy

Heroku上的Rails : NameError:未初始化的常数ApplicationPolicy
EN

Stack Overflow用户
提问于 2017-09-17 01:02:45
回答 1查看 893关注 0票数 1

在将Rails API应用程序部署到Heroku时,我的构建失败了,错误如下:

代码语言:javascript
运行
复制
-----> 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的相关部分:

代码语言:javascript
运行
复制
config.autoload_paths << Rails.root.join('lib')
Dir[Rails.root.join('app/policies/*.rb')].each &method(:require)

错误所在的行:

代码语言:javascript
运行
复制
class UserSettingPolicy < ApplicationPolicy

这两个策略文件都位于app/policies中。

任何关于可能发生的事情的想法都将是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2017-09-17 04:17:22

终于找到问题了。在上面的代码中,策略文件是一个接一个地加载的,因此必须将其更改为Rails,以便立即加载整个目录。

代码语言:javascript
运行
复制
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中的上述行最后是:

代码语言:javascript
运行
复制
config.autoload_paths += Dir[
    Rails.root.join('app', 'policies', '*.rb'),
    Rails.root.join('app', 'lib', '*.rb')
]

请注意lib的更改,因为Rails 5中自动加载的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46259766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档