Rails可选的gem配置

tfw*_*ght 7 rubygems ruby-on-rails

如果您想使用gem进行开发/测试而不想强迫其他开发人员使用,您会怎么做?现在我有

begin
  require 'redgreen'
rescue LoadError
end
Run Code Online (Sandbox Code Playgroud)

in test_helper.rb和没有gem配置,但这似乎是一种笨拙的方法,虽然是功能性的.我想做类似以下的事情:

config.gem "redgreen", :optional => true
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?或者我应该只提供那些非常肤浅的宝石......?

编辑

为了清楚起见,我只讨论那些特定的宝石,比如redgreen,它们实际上并没有在功能代码中使用,而只是在编码过程中.除了避免条件要求之外,根本不需要提供这些.

nat*_*vda 7

特定于您的开发环境的宝石应该安装在您的gemset或本地宝石中,但不能安装在Gemfile.

一个典型的例子是ruby-debug-base19xRubymine需要调试.这是安装在您的本地gemset中,但不是Gemfile因为并非所有编码器都使用Rubymine.

[编辑]

实际上,一切都在捆绑的上下文中运行,并且外部宝石是不可达的.确实存在一些变通方法.大多数都很脏:)

我在捆绑器问题上找到了很多好的解决方案.

最好的解决方案是将此添加到您的.irbrc:

# Add all gems in the global gemset to the $LOAD_PATH so they can be used even
# in places like 'rails console'. 
if defined?(::Bundler)   
  global_gemset = ENV['GEM_PATH'].split(':').grep(/ruby.*@global/).first 
  if global_gemset
    all_global_gem_paths = Dir.glob("#{global_gemset}/gems/*")
    all_global_gem_paths.each do |p|
      gem_path = "#{p}/lib"
      $LOAD_PATH << gem_path
    end   
  end 
end

require 'irb/completion' 
require 'rubygems' 
require 'wirble'

Wirble.init 
Wirble.colorize
Run Code Online (Sandbox Code Playgroud)

如果您随后安装wirbleglobalgemset,则可以找到它.原始资料来源:https://gist.github.com/7949​​15

希望这可以帮助.


Sco*_*ess 2

我在这里回答了我自己的类似问题

用户级捆绑器 Gemfile

一种方法是创建不同的环境:

group :scott do 
end
Run Code Online (Sandbox Code Playgroud)

然后

bundle --with-env=scott
Run Code Online (Sandbox Code Playgroud)