Статьи

Развертывание веб-приложений с использованием Webistrano и Capistrano

Согласно блогу Джоэла Спольски, одним из 12 шагов к улучшению кода является развертывание в один клик . Я работал в тех местах, где процесс развертывания содержал около 20 шагов и включал в себя множество копий путей и переменных среды. Это было очевидно склонно к ошибкам, и очень напряженно для вовлеченных разработчиков. Не дай бог ваша база данных вики рухнула, и вы потеряли все шаги!

Развертывание одним щелчком означает более быстрое развертывание с ошибками. Больше не нужно удивляться, в какой среде вы находитесь в данный момент, и если вы просто запускаете этот сценарий миграции при подготовке или производстве. Вы даже можете попросить своего Джимми развернуть прекрасное приложение для вас.

Существует немало инструментов, которые могут помочь вам развернуть ваши приложения:

  • Ant / Phing
  • Bash-скрипты
  • Дженкинс
  • Aegir

Сегодня, однако, я сосредоточусь на соединении Capistrano / Webistrano .

Оба пакета являются ruby ​​на основе рельсов и могут быть легко установлены с использованием гемов.

Capistrano — это инструмент с открытым исходным кодом, который позволяет запускать скрипты на нескольких серверах. Capistrano автоматизирует процесс создания новых версий приложения, а также поддерживает такие задачи, как обновление баз данных, восстановление мультимедийных ресурсов и т. Д.

Webistrano — это пользовательский интерфейс с открытым исходным кодом для управления развертыванием Capistrano. Он предоставляет описательный интерфейс для ваших проектов и этапов, а также простой способ добавить специфичные для среды настройки.

Установка

Установка Capistrano выполняется быстро и легко, если у вас установлены гемы и рубин:

$ gem install capistrano

С установленным capistrano, давайте перейдем к установке Webistrano. Я хочу, чтобы моя установка была видна снаружи на http://webistrano.server.com. Для этого я собираюсь использовать Phusion Passanger. Сейчас я собираюсь установить Webistrano прямо в моих httpdocs

$ cd /var/www/vhosts/webistrano.server.com/httpdocs
git clone git://github.com/peritor/webistrano.git .

Webistrano использует mysql для хранения информации о вашем проекте, этапах и развертываниях, поэтому давайте войдем и настроим его:

$ mysql
mysql> CREATE DATABASE `webistrano`;
mysql> CREATE USER 'webistrano'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON `webistrano`.* TO 'webistrano'@'localhost' WITH GRANT OPTION;

Теперь нам нужно настроить его, прежде чем мы соберем его с помощью rake. Два файла, которые нам нужно скопировать: база данных ( database.yml ) и общий файл конфигурации webistrano ( webistrano_config.rb ).

$ cp config/webistrano_config.rb.sample config/webistrano_config.rb
cp config/database.yml.sample config/database.yml

Теперь отредактируйте файл со своими подробностями mysql и другими параметрами, которые вы хотите установить.

И последнее, но не менее важное, прежде чем мы начнем сборку. Webistrano создает все таблицы стилей при первом запуске, поэтому общая папка должна иметь права на запись:

$ chmod -R 755 public

Вот и все для базовой установки. Осталось построить вебистрано. Нам понадобится пакет для установки. Если у вас еще нет пакета, используйте gem для его установки:

$ gem install bundler

Теперь запустим грабли для сборки webistrano:

$ RAILS_ENV=production rake db:migrate

Если вы похожи на меня, вы получите следующий пакет ошибок (~> 1.0.10) ruby , в противном случае перейдите к следующему шагу (установка пакета)

rake aborted!
Bundler could not find compatible versions for gem "bundler":
In Gemfile:
bundler (~> 1.0.10) ruby
Current Bundler version:
bundler (1.2.1)[/code]

Вам придется установить более старую версию пакета. Gems позволяет вам хранить разные версии одного и того же пакета, чтобы это не противоречило вашим другим приложениям ruby:

$ gem install bundler --version=1.0.10

Если это прошло успешно, или у вас не было проблем с вашим пакетом , просто запустите пакетную установку

$ bundle install
Fetching source index for http://rubygems.org/
Installing rake (0.9.2.2)
Installing activesupport (2.3.11)
Installing rack (1.1.3)
Installing actionpack (2.3.11)
Installing actionmailer (2.3.11)
Installing activerecord (2.3.11)
Installing activeresource (2.3.11)
Using bundler (1.0.10)
Installing highline (1.6.15)
Installing jruby-pageant (1.1.1)
Installing net-ssh (2.6.0)
Installing net-scp (1.0.4)
Installing net-sftp (2.0.5)
Installing net-ssh-gateway (1.1.0)
Installing capistrano (2.6.0)
Installing erubis (2.7.0)
Installing exception_notification (2.3.3.0)
Installing mocha (0.9.8)
Installing mysql (2.8.1) with native extensions
Installing open4 (0.9.3)
Installing rails (2.3.11)
Installing syntax (1.0.0)
Your bundle is complete! It was installed into ./vendor/bundler

Вам нужно снова строить с граблями

$ RAILS_ENV=production rake db:migrate
WARNING: 'require 'rake/rdoctask'' is deprecated. Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead.
at /var/www/vhosts/webistrano.server.com/httpdocs/vendor/bundler/ruby/1.8/gems/rake-0.9.2.2/lib/rake/rdoctask.rb
rake aborted!
no such file to load -- /var/www/vhosts/webistrano.server.com/httpdocs/config/webistrano_config
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

Если вы получили эту ошибку, выясните, какие гемы рейка у вас установлены, запустив список гемов

$ gem list
=> rake

Вы должны будете указать версию рейка вручную в вашем файле gem:

$ vim Gemfile
gem rake, '0.8.7'

Вам придется снова запустить пакетную установку. Мы начнем с разблокировки версии рейка, которую в настоящее время использует пакет, путем обновления пакета:

$ bundle update rake

Теперь установите правильный комплект

$ bundle install

и запускаем грабли используя bundle exec

$ bundle exec rake db:migrate --trace RAILS_ENV=production

Ура! Вы успешно установили Webistrano !

Запуск Вебистрано

** РЕДАКТИРОВАТЬ **

В моем первоначальном посте я советовал использовать Phusion Passenger for Apache для запуска websitrano, но, поскольку это произошло, это только вызывает проблемы с разрешениями во время развертывания. Phusion Passenger должен запускаться от имени пользователя, который владеет правами на conf/environment.rbвеб-браузер. Все казалось нормальным, и регистрация идентификатора моего пользователя, запустившего Webistrano, указывала на правильный, но кажется, что был какой-то конфликт, и процесс фактически выполнялся как никто . Вы можете узнать больше о проблеме переполнения стека

Имея это в виду, я бы рекомендовал вместо этого использовать монгрел.

$ sudo gem install mongrel
$ su - webistrano
$ cd /var/www/vhosts/webistrano.server.com/httpdocs
$ mongrel_rails start -e production -d -p 3000

Теперь перейдите на http://webistrano.server.com:3000, и вы должны увидеть экран входа

login: admin 
password: admin

Успех! Теперь вы можете увидеть основной экран Webistrano.

Если это вызвало у вас аппетит, прочитайте мой следующий пост о развертывании PHP-приложений с помощью Webistrano . Кроме того, не стесняйтесь оставлять свои комментарии ниже. Я надеюсь, что вы нашли этот пост полезным.