【问题标题】:Rails not finding files on lib folderRails 在 lib 文件夹中找不到文件
【发布时间】:2017-07-17 21:13:17
【问题描述】:

每次控制器或模型尝试访问 /lib 文件夹中的类时,都会显示:

NameError(未初始化的常量 'current_controller':'class_name' 你的意思是 'something_else')

是的,我知道 Rails 命名约定,并且使用正确。我的代码在其他几台服务器(Ubuntu 和 CentOS 6)上运行。它仅在我们拥有的这 2 台 RedHat7.2 服务器上出错 - 所有服务器上的 ruby​​/rails/gems 完全相同。我尝试使用的任何库文件都会发生错误。 SELinux 被禁用。

Ruby 版本 2.3.3; Rails 5.1.0 版(所有服务器上相同)

有人有什么想法吗?假设 Rails 会自动加载这些类文件。

【问题讨论】:

标签: ruby-on-rails ruby loading


【解决方案1】:

在轨道上

config/application.rb

module your_app
  class Application < Rails::Application
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.
    config.autoload_paths += %W(#{config.root}/lib/path)
  end
end

在轨道上 >= 5

module your_app
  class Application < Rails::Application
    config.eager_load_paths << "#{Rails.root}/lib/path"
  end
end

如果您希望 rails 自动加载您的库,您必须将其放在 app 文件夹下。

【讨论】:

  • 难道你还需要将lib 添加到rails 5 中的autoload_paths 中吗?我相信eager_load_paths 只会在eager_load 设置为true 时生效,这在开发中不会为true。在 rails 5 中,如果 eager_load 为 true,rails 将不会回退到生产环境中的自动加载,因此您还需要将目录添加到 eager_load_paths。
  • @Puhlze 至少在 5.1.2 中我只有 eager_load_paths,仔细检查了 config.eager_load 并在 development.rb 上设置为 false。类不会是 eager_loaded,但路径可用?不确定那里有什么黑魔法,现在不会看:p
  • 我的 application.rb 必须更新到 rails 5 标准。我不明白为什么在某些服务器中它仍然适用于 rails 4 标准。现在每个人都有 rails 5 标准,每个人都很高兴:)
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
相关资源
最近更新 更多