Like: ruby, ruby on rails, macosx, apple, textmate, linux, git, gity, ubuntu, gnome 2, Dub FX, Dropkick Merphys, android, google, The black keys, Prawn(rails), epub, vim,


Текст

фев 4, 2010
@ 8:55 pm
Постоянная ссылка

Rails + Git + Capistrano + Zenon = хороший deploy

Быстый деплой и возможность отката это всегда очень удобно и поэтому, как ни странно, capistrano)) Итак, как задеплоить rails приложение на хостинг(здесь в часности zenon) используя capistrano.

Предполагается, что локально у нас есть первоприложение. Так как на zenon используется fastcgi приложение нужно создавать с ключем -D. Ключ сгенерирует файлы dispatch.*(нужно помнить, что пути до ruby в файлах будут те, которые есть на машине, на которой вы содавали приложение => нужно их поменять на хостинговые, в случае с zenon “#!/usr/local/bin/ruby18”)

update: .htaccess в папке public должен иметь вид:

AddHandler fastcgi-script .fcgi
Options +FollowSymLinks +ExecCGI

RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]


Шаг ноль - готовим хостинг

Устанавливаем git. Git будет нужен для хранения репозитария на хостинге. Если над проектом будут работать несколько человек, то все же рекомендую построить иерархию доверия.


Шаг первый - git, сервер и приложение

а) На сервере хостинга создаем папочку где будем хранить репозитарий:

> mkdir repo

б) Загружаем в эту папку первоприложение

в) Создаем в папке с приложением файл .gitignore:

> vi .gitignore

c таким содержанием(ну или на любой другой вкус, у меня например в папке с проектом есть файлик error_log, который я тоже включил в .gitignore):

.DS_Store
log/*.log
tmp/**/*
db/*.sqlite3

г) Добавляем первоприложение в git:

> git init
> git add .
> git commit -am "Первый коммит."

Пол дела сделано


Шаг второй - git, машина, capistrano

а) Клонируем репозитарий:

> git clone ssh://user@home.domain/path/to/repo/project

б) заходим в папку с проектом и “закапистраниваем” его.

> cd project
> capify .

в) Последняя команда создала два файла, нам нужно отредактировать config/deploy.rb

set :application, "projectname"

set :repository,  "#{user}@home.domain:/path/to/repo/"
set :scm, :git
set :user, "ssh_user"

set :scm_username, user

set :use_sudo, false
set :branch, "master"
set :deploy_via, :checkout
set :git_shallow_clone, 1
set :deploy_to, "~/apps/#{application}"
default_run_options[:pty] = true


role :web, "home.domain"
role :app, "home.domain"
role :db,  "home.domain", :primary => true

namespace :deploy do
  task :after_symlink, :roles => :web do

 run "ln -s #{release_path}/public #{release_path}/www"
  run "ln -s #{release_path} ~/domain"
  run "aprestart soft"
  
  end
end

г) Ну и финальные штрихи.

>git add .
>git commit -am "deploy commit"
>git push 
> cap deploy:setup
>cap deploy:cold


Повседневная работа

>git commit -am "commit changes"
>git push
>cap deploy