Ruby on rails 如何在Rails 3中使用gem而不在gem文件中引用它

Ruby on rails 如何在Rails 3中使用gem而不在gem文件中引用它,ruby-on-rails,rubygems,ruby-on-rails-3,gem,bundler,Ruby On Rails,Rubygems,Ruby On Rails 3,Gem,Bundler,我想知道如何在Rails 3应用程序中访问gem,而不在gem文件中添加对它的引用。我想用ruby调试(我正在使用)。我用它来调试,但不是我团队中的每个人都这样做,而且强制依赖性只是为了我可以使用它似乎不是很外交。还有别的办法吗 如果结果很重要,我使用的是Rails3、Bundler 1.0.0、Ruby 1.9.2、RVM、OSX雪豹 另一方面,我曾考虑过使用gemfilegroup特性,但这也不太合适。对于factory_girl这样的东西来说,组似乎很好,虽然只有在特定的环境中才有实际的依

我想知道如何在Rails 3应用程序中访问gem,而不在gem文件中添加对它的引用。我想用ruby调试(我正在使用)。我用它来调试,但不是我团队中的每个人都这样做,而且强制依赖性只是为了我可以使用它似乎不是很外交。还有别的办法吗

如果结果很重要,我使用的是Rails3、Bundler 1.0.0、Ruby 1.9.2、RVM、OSX雪豹


另一方面,我曾考虑过使用gemfilegroup特性,但这也不太合适。对于factory_girl这样的东西来说,组似乎很好,虽然只有在特定的环境中才有实际的依赖关系,但是使用ruby debug,除非你想使用它,否则就不需要它了。

当然你不能,因为Rails 3隔离了系统的精华

我的建议是使用
:require=>false
选项将Gem添加到Gemfile中,以便包含、安装但从未加载。 然后,在您的应用程序中,手动请求gem


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

这非常难看,而且不会将其从gem文件中拉出,但我在gem文件中这样做,因此我可以在不同的环境中为一个gem使用两个不同的源:

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

只需将其设置为只有您才能在系统上设置的模糊环境变量即可。这样,您的同事就不会设置env var,也永远不会为他们安装或加载gem。

我最后将以下代码添加到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'

$:这是我自己在ruby 1.8和1.9中使用ruby_调试的解决方案

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

我知道这还不包括其他一些情况,如果有一个干净的方法来实现这一点会很好--
自动测试咆哮
自动测试事件
,以及我在
.irbrc
中需要/拯救的许多事情,我不想强迫每个人获得更好的体验,与wirble和hirb一样——但特别是对于
ruby debug
,如果对多个ruby版本进行测试是您痛苦的一部分,那么测试将非常有用


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

谢谢您的建议。但我真的不想要求安装gem。此特定gem的安装并不总是直接进行的,因此,
bundle install
命令可能会失败:(.使用此解决方案的风险由您自己承担。我相信它在RVM的后续版本中已不再适用于我。现在,我将ruby调试添加到我的gemfile中的开发组中。我决心自己解决这个问题,如果我这样做,我将与大家分享。IMO Bundler是Rails有史以来发生的最糟糕的事情。