繁体   English   中英

Ruby Gems如何在Rails中加载?

[英]How do Ruby Gems Load in Rails?

假设我有一个要使用的红宝石宝石,但是仅在一个模型或控制器中需要使用它。

有没有办法专门为那个模型或控制器加载该gem?

使其在系统范围内可用(从任何控制器调用)会浪费资源吗?

发布的答案不正确,完全有可能只为特定型号或控制器加载gem。 你的Gemfile允许您定义捆扎机可以使用需要一定的宝石集团 默认情况下,所有未分组的gem以及当前正在运行的环境的gem都是必需的,并且不需要任何命名的组。 因此,如果您具有以下Gemfile:

gem 'always_used_gem', '1.0.0'

group :rarely_used do
  gem 'rarely_used_gem', '1.0.0'
end

这样rarely_used_gem来,在初始应用程序加载时就不需要rarely_used_gem 如果您有需要该功能的特定方法,则可以执行以下操作:

def do_stuff
  Bundler.require :rarely_used
  # use stuff from rarely_used_gem
end

请注意:请确保Bundler.require位于方法调用之内或类似的方法内,否则在分析文件(即应用程序启动)时将需要该组

就是否要执行此操作而言,它实际上仅应用于特殊情况。 通过这样做,您将启动速度与执行速度进行了交换,这在开发中可能有意义,但在生产中可能没有意义。 另外,如果两个gem之间存在一些不兼容,则可以使用此方法(例如,我们使用它来解决几个AWS gem之间的问题。)

不,不可能。 一旦宝石被加载,它将可用于所有控制器/型号/所有物品。 这对您来说不是主要问题。 RAM和CPU时间便宜,程序员的时间却不然。

捆绑器自动加载/需要所有宝石,除非

#Gemfile
gem :somegem, :require => false

然后您可以在需要时执行它

#some_ruby_file.rb
#within_some_context 
require 'somegem'

我不知道它的用处以及何时执行(除了加载顺序很重要时,如摩卡宝石(需要最后加载))。 我将根据您自己的判断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM