1) заходим в папку проекта на локальном компьютере.
2) выполняем команду "capify ."
3) содержимое файла "проект/config/deploy.rb" меняем на, попутно не забыв поменять специфичные для проекта и аккаунта на locum.ru данные:
#========================================
#========================================
# _your_login_ - Поменять на ваш логин в панели управления
# _your_project_ - Поменять на имя вашего проекта
# _your_server_ - Поменять на имя вашего сервера (Указано на вкладке "FTP и SSH" вашей панели управления)
# set :repository - Установить расположение вашего репозитория
# У вас должна быть настроена авторизация ssh по сертификатам
set :application, "aaa"
set :repository, "file:///home/trololo/megaproject"
set :deploy_via, :copy
dpath = "/home/hosting_your_login/projects/_your_project_"
set :user, "hosting_your_login"
set :use_sudo, false
set :deploy_to, dpath
set :scm, :git
role :web, "_your_server_.locum.ru" # Your HTTP server, Apache/etc
role :app, "_your_server_.locum.ru" # This may be the same as your `Web` server
role :db, "_your_server_.locum.ru", :primary => true # This is where Rails migrations will run
after "deploy:update_code", :copy_database_config
task :copy_database_config, roles => :app do
db_config = "#{shared_path}/database.yml"
run "cp #{db_config} #{release_path}/config/database.yml"
end
set :unicorn_rails, "/var/lib/gems/1.8/bin/unicorn_rails"
set :unicorn_conf, "/etc/unicorn/_your_project_._your_login_.rb"
set :unicorn_pid, "/var/run/unicorn/_your_project_._your_login_.pid"
# - for unicorn - #
namespace :deploy do
desc "Start application"
task :start, :roles => :app do
run "#{unicorn_rails} -Dc #{unicorn_conf}"
end
desc "Stop application"
task :stop, :roles => :app do
run "[ -f #{unicorn_pid} ] && kill -QUIT `cat #{unicorn_pid}`"
end
desc "Restart Application"
task :restart, :roles => :app do
run "[ -f #{unicorn_pid} ] && kill -USR2 `cat #{unicorn_pid}` || #{unicorn_rails} -Dc #{unicorn_conf}"
end
end
#========================================
#========================================
4) выполняем команды:
git init
git add.
git commit -m "new app"
5) выполнить команду:
cap deploy:setup
данная команда только создаст на сервере необходимую структуру каталогов.
6) создать файл database.yml в папке "~/projects/megaproject/shared" на сервере и поменять на специфичную для сервера конфигурацию базы данных. Это файл будет использовать всякий раз, как вы будете обновлять свой код на сервере. Он будет автоматичеси затирать файл, используемый на вашем локальном компьютере.
7) выполняем команду:
cap deploy
или
cap deploy:update_code
данная команда зальет ваш проект на locum.ru и поменяет файл database.yml на файл, залитый на сервер на предыдущем шаге.
8) радуемся.
ЗЫ данный файл deploy.rb отличается от файла с сайта locum.ru двумя строчками:
set :repository, "file:///home/trololo/megaproject"
set :deploy_via, :copy
перая строчка - директория локального проекта, а не сервер.
вторая сторчка указывает стратегию обновления: проект архивируется, отправляется на сервер и обрабатывается на нем.
Анатолий, подскажите, что значит "поменять на специфичную для сервера конфигурацию базы данных"?
ОтветитьУдалитьЭто значит, что в настройках необходимо сменить имя базы данных на ту, которая была создана locum.ru?
Подскажите еще пожалуйста, или приведите пример, как правильно написать set :repository, "file:///home/trololo/megaproject" в реальной ситуации?
ОтветитьУдалитьИмя должно начинаться именно со слова file и необходимы именно три слэша?
Например у меня на локальном компьютере сайт хранится в папке vs/sites/rails_projects/site
В этом случае правильно будет написать:
set :repository, "file:///vs/sites/rails_projects/site"
Верно?
> Это значит, что в настройках необходимо сменить имя базы данных на ту, которая была создана locum.ru?
ОтветитьУдалитьНу да. Там ведь когда создаешь БД в панели управления, ей назначется определенный хост, имя пользователя, имя БД и пароль (который сам задешь).
И повторюсь, это должно быть в файле database.yml в папке shared, которая лежит на сервере.
Но вообще если у себя на компьютере не используешь production для тестирования, можешь использовать только свой файл database.yml который находится в папке config своего проекта. Для этого надо в файле deploy.rb закомментировать строчку:
after "deploy:update_code", :copy_database_config
которая отвечает за копирование, после обновления кода на сервере.
> В этом случае правильно будет написать:
> set :repository, "file:///vs/sites/rails_projects/site"
Надо путь до проекта указать. У меня под линуксом так работает (хотя скорее всего работает и без слова file в начале, не проверял). Если работаешь в винде, думаю, должно быть что-то типа такого:
set :repository, "c:/vs/sites/rails_projects/site"
1. В первой же команде, шаг 2) опечатка. capify, а не capfy.
ОтветитьУдалить2. Там что, только ветка рельсов 2.х обслуживается? Если да, то нет вопросов. Но если есть 3.х то надо бы добавить обслугу bundler. Причём не самолапно писаными командами, расширяющими namespace :deploy а чтобы была возможность rollback. Уже сейчас готово расширение нативное для этих целей.
2 sysadmin:
ОтветитьУдалить1) опечатался
2) это файл с сайта locum.ru. Я поменял только стратегию обновления.
Не поможете разобраться с проблемой.
ОтветитьУдалитьПри выполнении команды cap deploy происходит как бы зависание процесса
Лог
* executing `deploy'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
executing locally: "git ls-remote /Users/anton/rails/prod HEAD"
command finished in 28ms
* getting (via checkout) revision 34f12b2b866792004eaf7cd59bb80d4afcfbb5a8 to /var/folders/-D/-DfpcuSLGX8axN8uKKd3v++++TI/-Tmp-/20110712223535
executing locally: git clone -q /Users/anton/rails/prod /var/folders/-D/-DfpcuSLGX8axN8uKKd3v++++TI/-Tmp-/20110712223535 && cd /var/folders/-D/-DfpcuSLGX8axN8uKKd3v++++TI/-Tmp-/20110712223535 && git checkout -q -b deploy 34f12b2b866792004eaf7cd59bb80d4afcfbb5a8
command finished in 187ms
compressing /var/folders/-D/-DfpcuSLGX8axN8uKKd3v++++TI/-Tmp-/20110712223535 to /var/folders/-D/-DfpcuSLGX8axN8uKKd3v++++TI/-Tmp-/20110712223535.tar.gz
executing locally: tar chzf 20110712223535.tar.gz 20110712223535
command finished in 219ms
servers: ["lithium.locum.ru"]
Password:
** sftp upload /var/folders/-D/-DfpcuSLGX8axN8uKKd3v++++TI/-Tmp-/20110712223535.tar.gz -> /tmp/20110712223535.tar.gz
[lithium.locum.ru] /tmp/20110712223535.tar.gz
[lithium.locum.ru] done
* sftp upload complete
* executing "cd /home/hosting_anton/projects/prod/releases && tar xzf /tmp/20110712223535.tar.gz && rm /tmp/20110712223535.tar.gz"
servers: ["lithium.locum.ru"]
[lithium.locum.ru] executing command
На последней команде процесс останавливается и тишина