Развертывание Bundler + RVM + Passenger + Capistrano и недостающие драгоценные камни - PullRequest
9 голосов
/ 13 сентября 2011

Я получил сервер с указанной выше конфигурацией.

Это важная часть моего рецепта deploy.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
require 'bundler/capistrano'

set :rvm_ruby_string, 'ruby-1.9.2-p290'
set :rvm_type, :system
set :bundle_flags, "--deployment"

set :default_environment, {
  'PATH' => ENV['PATH'],
  'RAILS_ENV' => ENV['RAILS_ENV']
}

set :stages, %w(staging production)
require 'capistrano/ext/multistage'

Запуск cap staging deploy как есть, приводит к ошибке:

* executing "cd /mnt/data-store/project/releases/shared &&
bundle install --gemfile /mnt/data-store/project/releases/shared/Gemfile
--path /mnt/data-store/project/shared/bundle --deployment --without development test"

** [out :: localhost] The --deployment flag requires a Gemfile.lock.
Please make sure you have checked your Gemfile.lock into version control
before deploying.

... rolling back ...

failed: "env PATH=... RAILS_ENV=staging rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.2-p290' -c 'cd /mnt/data-store/project/releases/shared && bundle install --gemfile /mnt/data-store/project/releases/shared/Gemfile --path /mnt/data-store/project/shared/bundle --deployment --without development test'" on localhost

Gemfile и Gemfile.lock находятся в системе контроля версий. Сначала я запустил bundle install локально, чтобы сгенерировать файл .lock. Но упаковщик / capistrano указывает на / mnt / хранилище данных / проект / Releases / shared / Gemfile, поэтому я просто скопировал туда оба файла вручную. Я уверен, что я делаю это неправильно здесь. Я думаю, это должно быть скопировано автоматически.

Снова выполнил развертывание (1), и при установке комплекта он не вышел из строя, даже он имел

Your bundle is complete! It was installed into /mnt/data-store/project/shared/bundle на выходе.

НО, одна из моих задач с кепкой выполняет грабли. Результат этого: * Не удалось найти bcrypt-ruby-3.0.1 ни в одном из источников * Попробуйте запустить bundle install.

Продолжая свое приключение, я обнаружил, что когда у вас есть .bundle / config с BUNDLE_PATH: /mnt/data-store/project/shared/bundle Оно работает. У меня был этот каталог, вероятно созданный компоновщиком, под /mnt/data-store/releases/shared/, поэтому я скопировал вручную в корень rails.

Теперь грабли / рельсы c работают.

bundle show twitter показывает .../shared/bundle/ruby/1.9.1/gems/twitter-1.7.1.

НО, повторное развертывание возвращает меня к (1), потому что .bundle dir там нет.

Конкретные вопросы:

  1. Нужно ли создавать / копировать .bundle / config вручную?
  2. Нужно ли вручную копировать Gemfile / Gemfile.lock в общий каталог? Что произойдет, если я добавлю драгоценные камни? Стоит ли хранить две копии или синхронизировать их вручную / программно?
  3. Что я делаю не так?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Посмотрите на эту часть в файле deploy.rb (код Bundler)

args = ["--gemfile #{File.join(context.fetch(:current_release), bundle_gemfile)}"]
args << "--path #{bundle_dir}" unless bundle_dir.to_s.empty?

Там есть ключ с именем :current_release, возможно, этот ключ по какой-то причине установлен неправильно с Capistrano.*

:current_release в связке будет указывать на «общую» папку вместо последней версии (с отметкой времени)

Это выполняется на before 'deploy:finalize_update'.

ЧтоЯ бы сделал для того, чтобы это исправить, чтобы добавить свой собственный хук к этому событию.

before 'deploy:finalize_update', 'x:set_current_release'

И это фактический метод

task :set_current_release, :roles => :app do
    set :current_release, latest_release
end
0 голосов
/ 12 июля 2012

Ошибка

The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying.

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

Итак, удалите ненужные каталоги или файлы, а затем повторите попытку развертывания.

...