Capistrano, Rails 3.2, стандартные рецепты? - PullRequest
15 голосов
/ 19 марта 2012

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

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

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

Подумав об этом, мне в основном нужен cap, чтобы:

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

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

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

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

Здесь есть простой ответ?

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

обновление : я написал свое собственное руководство после того, как понял его.https://gist.github.com/2161449

Ответы [ 3 ]

9 голосов
/ 19 марта 2012

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

РЕДАКТИРОВАТЬ: да, вам нужно будет сделать тегирование самостоятельно, но ключ должен думать о методах, которые вы пишете в capfile, просто как о системных командах (помня, что у вас, вероятно, нет вашего обычного пути оболочки и другой среды) ). Следуйте примерам других команд git, и все будет в порядке.

РЕДАКТИРОВАТЬ: Лучший ответ (может быть: -)

  • иди сюда: https://github.com/capistrano/capistrano/wiki/2.x-From-The-Beginning
  • gem install capistrano (обратите внимание, обычно это не относится к вашему Gemfile)
  • кд
  • capify . Создает app/Capfile и app/config/deploy.rb
  • Вы используете конвейер ресурсов, поэтому в Capfile раскомментируйте load 'deploy/assets'
  • Теперь посмотрите на deploy.rb
    • имя приложения - это имя типа "my_application"
    • репозиторий - это URL-адрес вашего репозитория с контролем исходного кода, например, myusername@github.com: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, это cap -S <branch/tagname> deploy (убедитесь, что это заглавная буква S, может быть строчная).

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

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

лучше?

1 голос
/ 19 марта 2012

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

https://gist.github.com/2118882

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

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

0 голосов
/ 07 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...