Как использовать гем в Rails 3, не ссылаясь на него в Gemfile - PullRequest
5 голосов
/ 20 сентября 2010

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

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

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

Ответы [ 5 ]

3 голосов
/ 20 сентября 2010

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

2 голосов
/ 20 сентября 2010

AFAIK вы не можете, потому что Rails 3 изолирует системные гемы.

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

Или вы можете попробовать связать его в своем проекте в папке vendor (там должна быть папка для Gems) и игнорировать конкретную папку gem в SCM, чтобы ваши коллеги не пострадали. *

0 голосов
/ 18 декабря 2010

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

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

0 голосов
/ 10 октября 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
0 голосов
/ 22 сентября 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.

...