Некоторые другие разработчики rails и я обсуждали, как эффективно заморозить гемы в Rails 3, и мы разработали это решение. Это похоже на то, что предложил @asymmetric, но отличается в некоторых ключевых аспектах. Как я позже обнаружил на справочной странице gemfile, этот подход также страдает тем же ограничением, о котором @indirect предупреждал с помощью bundle install --deployment
, в том смысле, что ваши гемы должны быть либо чистыми ruby (без встроенной компиляции), либо эти шаги должны быть выполнены на идентичная архитектура для ваших серверов stage и prod.
Хорошо, теперь, когда у нас есть предварительные сведения, давайте посмотрим, как «заморозить» некоторые драгоценные камни в Rails 3 ...
Сначала начните с чистой окружающей среды:
$ rvm gemset use fresh
$ rvm gemset empty fresh
$ gem install rails
$ rails new strawman
$ cd strawman/
Затем установите камень, который вы хотите использовать:
$ gem install condi
Затем создайте каталог vendor/gems
и распакуйте в него гем:
$ mkdir vendor/gems
$ cd vendor/gems
$ gem unpack condi
Unpacked gem: '/tmp/strawman/vendor/gems/condi-0.0.6'
ДОПОЛНИТЕЛЬНО :
Если ваш гем не имеет файла .gemspec с ним (то есть спецификация является частью встроенной сборки Rakefile), Bundler может быть не в состоянии загрузить его правильно с помощью оператора: path. В этом случае вы должны вывести gemspec из файла gem, используя:
$ gem specification /tmp/condi-0.0.6.gem > condi-0.0.6/condi.gemspec
Или, если у вас уже установлен самоцвет, вы можете:
$ gem specification condi -v=0.0.6 > condi-0.0.6/condi.gemspec
Теперь обновите Gemfile
с помощью строки:
gem 'condi', '0.0.6', :path => 'vendor/gems/condi-0.0.6'
ПРИМЕЧАНИЕ : «В отличие от git, bundler не компилирует расширения C для самоцветов, указанных в качестве путей». [man gemfile] Так что только работает для чистых рубиновых самоцветов без собственных расширений! Будьте предупреждены!
Далее удалите драгоценный камень из вашего набора:
$ gem uninstall condi
Successfully uninstalled condi-0.0.6
И, возвращаясь в корневую среду rails, попробуйте запустить консоль rails:
$ cd ../..
$ rails c
Loading development environment (Rails 3.1.3)
1.9.3-p0 :001 >
Успех !! Ваш чистый рубиновый камень теперь эффективно заморожен в приложении Rails 3.