【问题标题】:RoR app works fine locally, but errors when using a from /lib when run on HerokuRoR 应用程序在本地运行良好,但在 Heroku 上运行时使用 from /lib 时出错
【发布时间】:2023-08-22 13:02:01
【问题描述】:

我的 RoR 应用程序在本地运行时运行良好,但是当我在 Heroku 上运行它时,它在这一行出错:

my_reader = Docreader.new(params[:doc])

错误:

NameError (uninitialized constant NotesController::Docreader):

Docreader.rb 位于 lib 文件夹中

我试过heroku restart,但没有用。我究竟做错了什么?感谢阅读。

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    可能的罪魁祸首是Docreader.rb 中的大写字母D。您需要确保将其命名为 docreader.rb - 全部小写。 Heroku 使用区分大小写的文件系统,因此混合大小写文件可以在 OS X 或 Windows 本地工作,但不能在 Heroku 上工作。

    一般来说,不建议在使用 Ruby on Rails 的文件名中使用任何大写字母(小写也是 Ruby 中的事实标准),因为 Rails 的自动加载代码始终使用小写。

    【讨论】:

      【解决方案2】:

      让我的模块在 Heroku 上运行时遇到了类似的问题。除了@wuputah 声明的自动加载命名约定之外,我发现模块代码必须是必需的,因为 Rails 在 Heroku 上的生产环境做出了线程安全假设(即使它在我的 production.rb 文件中被注释掉了。 )只要我在模块上调用“包含”之前“需要”模块文件,一切就开始工作了。

      请查看这篇关于在 Heroku 中正确加载模块的优秀文章:

      http://www.williambharding.com/blog/technology/rails-3-autoload-modules-and-classes-in-production/

      【讨论】:

        最近更新 更多