Подтвердить что ты не робот

Как заморозить драгоценные камни в приложение Rails 3?

Я хочу заморозить конкретный камень в моем приложении Rails.

В рельсах 2 была эта команда:

rake gems:unpack

Я не могу найти эту команду в Rails 3.

4b9b3361

Ответ 1

Мне еще не приходилось это делать, но я считаю, что все это обрабатывается bundler.

Когда вы создаете новое приложение rails3, привязки рельсов помещаются в ваш Gemfile. Вы можете запустить bundle install, чтобы установить их. По умолчанию они установлены в ваш BUNDLE_PATH.

Если вы хотите установить их в своем приложении, вы можете указать, где: bundle install vendor/gems.

Ответ 2

Итак, короткий ответ: нет.

Когда вы изменяете свой Gemfile и запускаете bundle install или bundle update, bundler обрабатывает разрешение зависимостей для вас и определяет лучшие (новейшие) версии каждого драгоценного камня, который вам нужен, который удовлетворяет всей цепочке зависимостей (вы не получит новую версию, которая разбивает другой драгоценный камень в списке зависимостей и т.д.). Вы также можете, конечно, разместить определенную версию или спецификацию " >= 1.2.3" или использовать в Gemfile, используя знакомый синтаксис из дней config.gem, и поставщик также обязательно выполнит это (или выиграет) t создает Gemfile.lock, если нет действительного разрешения).

Когда Bundler выполняет свою деятельность, он создает файл Gemfile.lock, который (и это обеспечивается тем, что вы используете только один поставщик пакетов для управления вашим камнем на всех рабочих станциях/средах/развертываниях) выполняет ту же функцию, что и замораживание всех драгоценных камней, которые вы это необходимо. Бесплатно! (Проверьте этот файл на контроль версий!) Если ваш новый стажер разработки отключает ваш источник на новой машине, он принимает один bundle install, а те же самые версии установленных камней находятся на ее машине. Нажмите на развертывание и сделайте bundle install --deployment там (или, скорее всего, бросьте его в свой файл Capfile), и будут установлены те же самые драгоценные камни (на этот раз в вендор/комплект, настраиваемый). Bundler используется в Rails 3 для управления загрузкой всех драгоценных камней, поэтому везде, где вы сказали поставщику установить их (независимо от вашего обычного местоположения gem install по умолчанию, или BUNDLE_PATH (который записан в .bundle/config if вы устанавливаете с помощью bundle install --path=foo в противном случае), bundler будет загружать правильные, даже если они отличаются от системных драгоценных камней.

Вам не нужно распаковывать драгоценные камни и проверять их в своем приложении, потому что это не имеет значения: вы гарантируете, что одни и те же версии вызываются независимо от того, где они установлены, что, вероятно, будет отличаться от машины для того, чтобы машина anyways (.bundle/не должна быть проверена на репо) - так зачем вставлять еще 60-80 МБ файлов в свое репо, которое вы никогда не будете менять или использовать? (кстати, именно поэтому я бы не рекомендовал предлагать bundle install --path=vendor/gems как nfm - это не обязательно неправильно, просто нет никакой пользы для него по сравнению с обычным рабочим процессом bundler, и теперь ваш размер репо только раздулся).

Ответ 3

НЕ ИСПОЛЬЗУЙТЕ "РЕКОМЕНДУЕМЫЙ" ОТВЕТ ПО NFM!

Вместо этого просмотрите сайт Bundler, особенно страницу развертывания: http://gembundler.com/deploying.html

Краткий обзор состоит в том, чтобы использовать определенные версии в вашем Gemfile и запускать bundle install --deployment в каждой целевой системе, где вам нужны точные версии gem.

Использование опции --path установит драгоценные камни, но это не совсем то, что вы хотите сделать. Как сказал Мэтт Энайт, вы просто раздуваете свой SCM тем, что связующий может умело работать в каждой целевой среде.

Ответ 4

Мне пришлось сделать это для развертывания typus gem на Heroku, поскольку вы не можете запустить heroku rails generate typus на Heroku, учитывая его файловую систему только для чтения. Я не хотел, чтобы все драгоценные камни помещали в мое приложение, только то, что вызывало у меня горе. Вот шаги, которые приводят к успеху:

  • создать каталог в app_name/vendor/gems/gem_name (необязательно)... в моем случае /app _name/vendor/gems/typus

  • добавьте следующее в gemfile (это говорит о том, где найти и поместить источник драгоценных камней):

    gem 'typus',: git = > 'https://github.com/fesplugas/typus.git',: path = > "vendor/gems/typus"

  • затем из каталога вашего приложения (это устанавливает жемчужину в ваше приложение):

    'gem unpack typus --target vendor/gems/typus'

  • затем bundle install

  • то.. в моем случае... зафиксировать и нажать в репозиторий, а затем развернуться до герою... вам, возможно, придется запустить heroku rake db:migrate

Ответ 5

Предполагая, что у вас уже есть bundler gem:

  • $ bundle lock
  • $ git add Gemfile.lock

Ответ 7

Вы можете связать установку на Dreamhost без каких-либо проблем. Если вы находитесь в общей среде, среда уже настроена для их локального хранения в вашем домашнем каталоге. Если вы находитесь в VPS или Dedicated, вы можете запустить установку пакета с правами root или просто добавить это в свой .bash_profile

export GEM_HOME=$HOME/.gems
export GEM_PATH=$GEM_HOME:/usr/lib/ruby/gems/1.8

Ответ 8

Я второй ответ tsega (обновленный coreyward). "пакет пакетов" - это общий ответ.

Плакат не спросил, может ли он заморозить свои драгоценные камни. Он хотел знать КАК. Ответы типа "Просто не делай этого" вообще не помогают. Да, выяснилось, что его конкретная проблема была немного иной, но, хотя пакет пакетов был переполнен, он все еще решает проблему.

Я работал над множеством систем, а на некоторых у вас просто нет полного доступа. Установка драгоценных камней на некоторых системах просто не является вариантом. Поэтому, если вы не упакуете их, в общем, вы ввернуты. Существуют различные способы обхода решений для разных хостов и систем, но для некоторых нет.

Ответ 9

Pod - Если вам нужно изменить драгоценный камень, наилучшей практикой для этого было бы разветвление проекта, внесение изменений, а затем использование флага git 'в bundler:

git 'some_gem', :git => 'git://github.com/me/my_forked_some_gem.git'

Таким образом, вы будете уведомлены, когда камень будет обновлен.

Ответ 10

Команда, которая вам нужна, это bundle package, которая просто распаковывает драгоценные камни и зависимости в папке vendor/cache.

Но только уведомление, :git => .... вид драгоценных камней не будет упакован. Вы должны взломать выход для :git => ... связанных драгоценностей, чтобы получить упакованные.

Ответ 12

Ну, мне нужно немного изменить один из драгоценных камней, в котором я нуждаюсь. Поэтому мне нужно сохранить его в своем репо. Так что NFM упомянул то, что мне, вероятно, нужно.

Ответ 13

Много комментариев несколько говорят о том, что нецелесообразно использовать пакет-install -path vendor/gems, но те люди, которые используют Dreamhost, должны заметить, что вы не можете использовать установку пакета в Dreamhost.

Решение состоит в том, чтобы собрать все драгоценные камни в папку поставщика и загрузить все это в каталог Dreamhost.

Есть другие решения, чтобы обойти это, но это намного сложнее сделать.