我的RoR应用程序在本地运行时运行正常,但是当我在Heroku上运行它时,它在此行上出错:
my_reader = Docreader.new(params[:doc])
错误:
NameError (uninitialized constant NotesController::Docreader):
Docreader.rb位于lib文件夹
我已经尝试了heroku restart
,但它没有帮助。我究竟做错了什么?谢谢你的阅读。
答案 0 :(得分:1)
可能的罪魁祸首是D
中的大写字母Docreader.rb
。您需要确保将其命名为docreader.rb
- 所有小写字母。 Heroku使用区分大小写的文件系统,因此混合大小写文件将在OS X或Windows中本地工作,但不能在Heroku上工作。
一般情况下,不建议在文件名中使用Ruby on Rails中的任何大写字母(小写也是Ruby中的事实标准),因为Rails的自动加载代码总是使用小写。
答案 1 :(得分:0)
我有一个类似的问题让我的模块在Heroku上运行。除了@wuputah声明的自动加载命名约定之外,我发现由于Rails在Heroku上的生产环境做出的线程安全假设,必须要求模块代码(即使它在我的production.rb文件中被注释掉了)。一旦我在模块上调用“include”之前“需要”模块文件,一切都开始工作了。
请看一下这篇关于让模块在Heroku中正确加载的优秀文章:
http://www.williambharding.com/blog/technology/rails-3-autoload-modules-and-classes-in-production /