5

我想知道如何在 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 并没有真正需要它存在,除非你想使用它。

4

5 回答 5

3

这真的很难看,它不会将它从你的 gemfile 中拉出来,但我在我的 Gemfile 中这样做,所以我可以在不同的环境中使用 2 个不同的源作为 gem:

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

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

于 2010-09-20T18:24:05.853 回答
2

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

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

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

于 2010-09-20T16:04:00.620 回答
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 文件中的事实可能是最好的。

于 2010-09-22T15:26:26.450 回答
0

我知道这并没有涵盖其他autotest-growl一些autotest-fsevent情况.irbrc不想强加于每个人,比如 wirble 和 hirb ——但特别是对于ruby-debugruby ​​-debug -wrapper gem,如果针对多个 Ruby 版本进行测试是您痛苦的一部分,那么它会很有帮助。

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

于 2010-12-18T04:39:08.310 回答
0

这是我自己在 ruby​​ 1.8 和 1.9 中使用 ruby​​_debug 的解决方案

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
于 2010-10-10T04:37:52.210 回答