Capistrano, Rails 3.2, стандартные рецепты?

Я разрабатывал Rails некоторое время, но почему-то избегал использования capistrano до сих пор.

Попытка выяснить, как начать работу, я запутался в лучшем рецепте capistrano для довольно "стандартных" рельсов 3.x с развертыванием конвейера. Возможно, потому, что оглядываясь на Google, можно найти ответы "от разных частей истории" с разными историческими периодами, когда в кепку были встроены разные вещи.

У меня есть приложение, которое я храню в git, rails 3.2, с конвейером активов, развернутым только на одном хосте с пассажиром.

Размышляя об этом, мне в основном нужна кепка:

  • развертывание из git?
  • сделать тег в git для развертывания (и/или использовать ветку развертывания? Что бы ни было наиболее стандартным в cap, если есть такая вещь)
  • установить пакет --deployment
  • rake db: migrate
  • rake assets: precompile
  • коснитесь tmp/restart.txt

О, дерьмо, еще одна странная вещь:

  • Думаю, что я использую общесистемную установку rbenv на сервере развертывания. Не уверен, что это влечет за собой.

Какой самый стандартный, простой, простой и удобный способ сделать кепку все это? Есть что-то, чего я не хватает? Если некоторые из тех, что я указал, не являются стандартными, я рад использовать стандартную передовую практику вместо этого (возможно, это исключение или два, мне действительно нужен тег git для каждого развертывания, даже если это не лучший стандарт практика, хотя я бы подумал, что это будет, запутались, глядя на документы, как это работает)

Есть ли легкий ответ здесь?

РЕДАКТИРОВАТЬ: Да, я просмотрел вики Cap. Возможно, потому, что я медленный, но я нашел ответы на NONE моих вопросов. Существует даже не документ "начало работы". Нет никакой документации о том, что делает дефолт из рецепта крышки коробки. и т.д.

update. Я написал собственный гид после выяснения этого. https://gist.github.com/2161449

Ответы

Ответ 1

Ну, не нужно использовать capistrano - это благословение:-). Я стал не любить, но, честно говоря, он стал намного лучше, и документ https://github.com/capistrano/capistrano/wiki/ затрагивает большинство ваших проблем - раздел о RVM может быть достаточным в качестве альтернативы rbenv. Ваша конфигурация должна в значительной степени работать с готовым файлом capfile.

EDIT: да, вам нужно будет пометить себя, но ключ должен думать о методах, которые вы пишете в capfile, как о просто командах системы (помните, что у вас, вероятно, нет обычного пути оболочки и другой среды). Следуйте примерам других команд git, и все будет в порядке.

EDIT: лучший ответ (возможно: -)

  • Перейдите сюда: https://github.com/capistrano/capistrano/wiki/2.x-From-The-Beginning
  • gem install capistrano (заметьте, обычно это не принадлежит вашему Gemfile)
  • cd
  • capify . Создает app/Capfile и app/config/deploy.rb
  • Вы используете конвейер активов, так что в Capfile uncomment load 'deploy/assets'
  • Теперь посмотрим на deploy.rb
    • имя приложения - это имя типа "my_application" Репозиторий
    • - это URL-адрес вашего репозитория управления исходным кодом, например. [email protected]:yourrepo/yourproj.git
    • scm: git (правильно? Если нет, та же идея: URL выше и это для SVN или что-то еще)
    • role :web "www.example.com", и поскольку ваши: db и: app находятся на одной коробке, те же
    • вы используете Passenger, поэтому раскомментируйте строки как указано.
    • не уверен, но вам может потребоваться require "bundler/capistrano" вверху
    • вам понадобится set :deploy_to, <remote installation path> возможно "/var/www"
    • следуйте другим шагам руководства.
    • гипотетически после этих шагов и шагов, которые я пропустил, проверьте все это и убедитесь, что ваше приложение проверено (и нажато, если git), и выполните cap deploy:setup

Гипотетически, настройка настроит ваш сервер соответственно. Скорее всего, ошибка здесь в том, что ваш текущий компьютер нуждается в разрешениях для ssh на удаленном компьютере, а удаленной машине нужен доступ к репозиторию управления версиями. Открытые ключи - ваш друг.

После этого рабочий процесс:

  • внести изменения
  • проверить локально
  • совершить и нажать на git
  • cap deploy migrations (часть миграции необходима, только если вы это сделали)

В большинстве организаций есть какие-то промежуточные или тестовые серверы. Найдите "многоступенчатый", чтобы получить его, чтобы вы могли делать cap test deploy и cap staging deploy и т.д.

Чтобы развернуть ветку (и я думаю, что тег) на git it cap -S <branch/tagname> deploy (убедитесь, что ее капитал S может быть строчным).

Как только вы это сделаете, возможно, вам захочется сделать до или после развертывания - например, отправку электронной почты, восстановление карты сайта, резервное копирование базы данных и т.д. Используйте перед или после перехвата, чтобы написать свои собственные задачи.

Таким образом, самая худшая часть capistrano заключается в том, что все документы предполагают, что вы знаете, какого черта он делает. В двух словах он использует ssh (ruby net-ssh) для выполнения команд на удаленном сервере с любой локальной рабочей станции, из которой вы развертываете. Он смотрит на голову вашего исходного дерева (или тега или ветки, если указан), вытаскивает его в новое место на вашем сервере, делает что-либо еще (миграция, предварительная компиляция активов) и получает приложение в готовность; как только он выглядит хорошо, он изменяет символическую ссылку (например, /var/www/current, чтобы указать на новое местоположение, а затем (в случае с пассажиром) вызывает touch app/tmp/restart.txt, чтобы заставить сервер перезагрузиться.

лучше?

Ответ 2

Это рецепт крышки, который я использую для большинства моих проектов...

https://gist.github.com/2118882

Это не тегирование, но это может быть сделано в пользовательской задаче, они написаны как грабли. По умолчанию он выполнит установку прекомпиляции и комплектации. В нижней части находится задача просто перезагрузить, коснувшись tmp/restart.txt вместо перезапуска. Он также очистит ваши выпуски, чтобы у вас были только последние 3 на сервере (а не по умолчанию, сохраняя их навсегда).

Я не знаю RBEnv в любой среде, я использую RVM для разработки и использовал RVM в производстве один раз, но это такая проблема, связанная с управлением несколькими рубинами в производственной среде (и очень плохой практикой), что я не буду сделайте это снова. Это добавило много сложности процессу обновления пакетов на стороне сервера.

Ответ 3

Вы видели Railscast: Развертывание в VPS Хотя это основано на nginx и единороге, есть альтернативный рецепт пассажира.