ruby-on-rails – Rails 5:在生产中加载lib文件

我将我的一个应用程序从Rails 4.2.6升级到了Rails 5.0.0。 Upgrade Guide说,默认情况下,自动加载功能现在在生产中已禁用。

现在我总是在我的生产服务器上收到一个错误,因为我在application.rb文件中加载了带有autoload的所有lib文件。

module MyApp
    class Application < Rails::Application
        config.autoload_paths += %W( lib/ )
    end
end

现在,我将config.enable_dependency_loading设置为true,但是我想知道是否有更好的解决方案。必须有原因,默认情况下,生产中禁用自动加载。

移动到Rails 5后的更改列表:

>将lib目录放入应用程序中,因为应用程序中的所有代码都在dev中自动加载,并且在加载prod中最重要的是最重要的是在开发中自动加载,因此您每次进行更改都不必重新启动服务器。
>删除指向lib内部自己的类的任何require语句,因为它们的文件/目录命名都是正确的,因为它们都是自动加载的,如果你留下require语句,它可能会中断自动加载。更多信息here
>在所有环境中设置config.eager_load = true,以在dev中急切地看到代码加载问题。
>使用Rails.application.eager_load!在播放线程之前避免“循环依赖”错误。
>如果您有任何ruby / rails扩展名,请将该代码留在旧的lib目录中,并从初始化程序手动加载它们。这将确保在您可以依赖于它的进一步逻辑之前加载扩展名,以确保和加载:

#config/initializers/extensions.rb
Dir["#{Rails.root}/lib/ruby_ext/*.rb"].each {|file| require file }
Dir["#{Rails.root}/lib/rails_ext/*.rb"].each {|file| require file }
http://stackoverflow.com/questions/38198668/rails-5-load-lib-files-in-production

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails – Rails 5:在生产中加载lib文件