gpt4 book ai didi

ruby-on-rails - 如何懒惰地执行初始化程序?

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:26 28 4
gpt4 key购买 nike

Gemfile 中有很多 gem 时,Rails 的启动时间非常糟糕。

但问题是我们并不总是需要加载所有的 gem。

  • rake db:migrate(和 friend 们)并不真正需要任何非 ActiveRecord 相关的东西(甚至可能不需要)。
  • 另一方面,rails c 可能需要其中的大部分内容。
  • rake assets:precompile 可能根本不需要太多。
  • 等等

不幸的是,initializers 与 gems 绑定(bind)得非常紧密(例如,当需要 simple_form 时应该进行 simple_form 配置,因此 gem 'simple_form' 会失败,require: false).

所以问题是什么是延迟执行所有初始化程序以缩短启动时间但仍不破坏任何东西的最佳方法。

最佳答案

您可以完全控制 Bundler 在启动时加载的 gem。在您的 application.rb 中,您会发现以下内容:

if defined?(Bundler)
Bundler.require *Rails.groups(:assets => %w(development test))
end

您可以稍微修改它以对 ENV 变量使用react,以便告诉捆绑程序加载您的 gem 的简化子集。

if defined?(Bundler)
if ENV['RAKE_ENV']
Bundler.require :rake
else
Bundler.require *Rails.groups(:assets => %w(development test))
end
end

现在,您可以通过检查是否设置了环境变量来切换初始化程序。

在您的 Gemfile 中,您必须创建一个名为“rake”的组,就像创建“开发”和“测试”组一样。

关于ruby-on-rails - 如何懒惰地执行初始化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774435/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com