Как использовать гем в Rails 3, не ссылаясь на него в Gemfile

Мне интересно, как сделать драгоценный камень доступным в приложении Rails 3, не помещая ссылку на него в файл драгоценного камня. Я хочу сделать это с помощью ruby-debug (я использую ruby-debug19) . Я использую это для отладки, но не все в моей команде делают это, и форсирование зависимости только для того, чтобы я мог ее использовать, кажется не очень дипломатичным. Есть ли другой способ?

Если это имеет значение, я использую Rails3, Bundler 1.0.0, Ruby 1.9.2, RVM, OSX Snow Leopard.

Кстати, я думал об использовании функции группы gemfile, но это тоже не кажется правильным. Группы кажутся отличными для таких вещей, как factory_girl, где есть реальная зависимость, хотя и только в определенных средах, но с ruby-debug в ней нет реальной необходимости, если вы не хотите ее использовать.


person Blake Taylor    schedule 20.09.2010    source источник
comment
Я полон решимости выяснить это для себя, и поделюсь, если я это сделаю. IMO Bundler — худшее, что когда-либо случалось с Rails.   -  person bioneuralnet    schedule 03.02.2012


Ответы (5)


Это действительно уродливо, и это не вытаскивает его из вашего gemfile, но я делаю это в своем Gemfile, поэтому я могу использовать 2 разных источника для гема в разных средах:

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

Просто сделайте его малоизвестной переменной окружения, которую можете установить только вы в своей системе. Таким образом, у ваших коллег не будет установлен env var, и гем никогда не будет установлен или загружен для них.

person johnmcaliley    schedule 20.09.2010

Насколько я знаю, вы не можете, потому что Rails 3 изолирует системные драгоценные камни.

Я предлагаю добавить Gem в Gemfile с параметром :require => false, чтобы он был включен, установлен, но никогда не загружался. Затем в своем приложении затребуйте драгоценный камень вручную.

Или вы можете попытаться связать его в своем проекте в папке поставщика (должна быть папка для драгоценных камней) и игнорировать конкретную папку драгоценных камней в вашем SCM, чтобы ваши коллеги не пострадали.

person Simone Carletti    schedule 20.09.2010
comment
Спасибо за предложение. Я бы очень не хотел даже требовать установки драгоценного камня. Установка этого конкретного драгоценного камня не всегда проста, и в результате команда bundle install может завершиться ошибкой :(. - person Blake Taylor; 20.09.2010

В итоге я добавил следующий код в инициализатор 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.

person Blake Taylor    schedule 22.09.2010
comment
Используйте это решение на свой страх и риск. Я считаю, что он перестал работать для меня в последующей версии RVM. Сейчас я добавляю ruby-debug в группу разработки в свой gemfile. - person Blake Taylor; 18.12.2010

Это мое собственное решение по использованию 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
person Alex Le    schedule 10.10.2010

Я знаю, что это не распространяется на некоторые другие случаи, когда было бы неплохо, если бы был чистый способ сделать это - на ум приходят autotest-growl и autotest-fsevent, а также множество вещей, которые мне нужны/спасаются в моем .irbrc для более приятного опыта. которые я не хочу навязывать всем, например wirble и hirb, но специально для ruby-debug, ruby-debug-wrapper gem полезен, если вы испытываете трудности с тестированием нескольких версий Ruby.

Если вы хотите избежать установки любой версии ruby-debug, я думаю, что варианты, предложенные другими, являются единственными способами в настоящее время.

person ches    schedule 18.12.2010