如何在Rails 3中使用gem而不在Gemfile中引用它

时间:2010-09-20 15:24:12

标签: ruby-on-rails rubygems ruby-on-rails-3 gem bundler

我想知道如何在Rails 3应用程序中访问gem,而不在gemfile中引用它。我想用ruby-debug(我正在使用ruby-debug19)来做这件事。我使用它进行调试,但不是我团队中的每个人都这样做并强迫依赖,因此我可以使用它似乎不是非常外交。还有另一种方式吗?

如果最终问题,我正在使用Rails3,Bundler 1.0.0,Ruby 1.9.2,RVM,OSX Snow Leopard

在旁注中,我曾考虑过使用gemfile组功能,但这也感觉不对。群组似乎很适合像factory_girl这样的东西,虽然只有在特定的环境中才有真正的依赖,但是使用ruby-debug除非你想使用它,否则没有真正的需要它。

5 个答案:

答案 0 :(得分:3)

这真的太丑了,它不会把它从你的gem文件中删除,但是我在我的Gemfile中这样做,所以我可以在不同的环境中为一个gem使用2个不同的源:

if ENV['MY_RDEBUG_VAR'] == "i_want_to_use_rdebug"
  gem "ruby-debug"
end

只需将其设置为一个只有您在系统上设置的模糊环境变量。这样,您的同事将不会拥有env var set,并且永远不会为它们安装或加载gem。

答案 1 :(得分:2)

AFAIK你不能,因为Rails 3隔离了系统Gems。

我的建议是使用:require => false选项在Gemfile中添加Gem,以便包含,安装但从未加载。 然后,在您的应用中,手动需要宝石。

或者你可以尝试将它捆绑在你的项目中,在供应商文件夹中(应该有一个Gems的文件夹)并忽略你的SCM中的特定gem文件夹,这样你的同事就不会受到影响。

答案 2 :(得分:0)

我最终将以下代码添加到rails初始化程序并忽略它.git / info / exclude文件。

$: << Bundler.bundle_path.join("gems", "ruby-debug19-0.11.6", "cli")
$: << Bundler.bundle_path.join("gems", "ruby-debug-base19-0.11.24", "lib")
$: << Bundler.bundle_path.join("gems", "linecache19-0.5.11", "lib")
$: << Bundler.bundle_path.join("gems", "columnize-0.3.1", "lib")
require 'ruby-debug'

虽然这有效,但我不知道是否有人应该这样做,接受这些依赖关系需要放在gem文件中的事实可能是最好的。

答案 3 :(得分:0)

这是我自己使用ruby_debug同时使用ruby 1.8和1.9

的解决方案
if RUBY_VERSION.include?('1.9')
  ruby_debug = 'ruby-debug19'  # new branch for ruby-debug that supports 1.9
else
  ruby_debug = 'ruby-debug'
  gem 'fastercsv' # ruby 1.9 bundles FasterCSV now
end


group :test do
  gem 'webrat'
  gem "factory_girl"
  gem 'shoulda'

  # gem 'redgreen'
  gem 'autotest-rails'
  gem 'autotest-fsevent'
  gem 'autotest'  
  gem ruby_debug
end

group :development do
  gem ruby_debug
end

答案 4 :(得分:0)

我知道这并没有涵盖其他一些情况,如果有一个干净的方法来实现这一点会很好 - autotest-growlautotest-fsevent会浮现在脑海中,以及很多事情我需要/ .irbrc中的救援,以获得更好的体验,我不想强​​迫所有人,比如wirble和hirb--但特别是ruby-debugruby-debug-wrapper gem是有帮助的针对多个Ruby版本进行测试是您痛苦的一部分。

如果您想避免安装任何版本的ruby-debug,我认为其他人建议的选项是目前唯一的选择。