Capistrano ã§ãã¼ã«ã«ã«ç½®ãã¦ããã¢ããªã±ã¼ã·ã§ã³ããããã¤
Rails ã¢ããªã±ã¼ã·ã§ã³éçºä¸ã«ããã¼ã«ã«ç°å¢ã§ Passenger + production ã¢ã¼ãã®ç¢ºèªãç°¡åã«åºæ¥ãããã«ãããã£ãäºãããã試ãã« Capistrano ã§ãããã¤ã§ããããã«ãã¦ã¿ã¾ããã
ApacheãRubyãPassenger 辺ãã¯ã¤ã³ã¹ãã¼ã«ã»è¨å®æ¸ã¿ã¨ãã¾ãã
ã¾ããRails 㯠3.2.13 ã§ç¢ºèªãã¾ããã
ã¾ãã¯ã¢ããªã±ã¼ã·ã§ã³ããããã¤ããå
ã®ã«ã¼ããã£ã¬ã¯ããªãä½æãã¾ãã
ãã®ä¸ã«ã¢ããªã±ã¼ã·ã§ã³åã®ãã£ã¬ã¯ããªãä½æããã¾ãã
% sudo mkdir /var/apps % sudo chown -R deployuser:deployuser /var/apps
BundlerãCapistrano ãã¤ã³ã¹ãã¼ã«ãã¾ãã
% gem install bundler capistrano capistrano_colors
rbenv ã使ã£ã¦ããå ´å㯠rehash ãå¿ããã«ã
% rbenv rehash
åããããã®ãã¼ã«ã«ãããã¤ç¨ã¨ããäºããããRails ã¢ããªã±ã¼ã·ã§ã³å ã« deploy.rb ãä½ããããªãã£ããããCapistrano ç¨ã«é©å½ãªãã£ã¬ã¯ããªãä½æãã¾ããã
% mkdir -p ~/deploy/exampleapp % cd ~/deploy/exampleapp
capify ãå®è¡ãã¾ãã
% capify .
çæããã Capfile ãç·¨éã
% vi Capfile
deploy/assets ã®ã³ã¡ã³ãã¢ã¦ããå¤ãã¦ããã¾ãã
load 'deploy' load 'deploy/assets' load 'config/deploy'
次㫠config/deploy.rb ãç·¨éãã¾ãã
% vi config/deploy.rb
Git ãªã©ã® SCM ã§ç®¡çããã¦ããªã Rails ã¢ããªã±ã¼ã·ã§ã³ããããã¤ããããã以ä¸ã®ããã«è¨å®ãã¾ããã
require "bundler/capistrano" set :application, "ExampleApp" # for rbenv set :default_environment, { 'PATH' => "/home/akishin/.rbenv/shims:/home/akishin/.rbenv/bin:$PATH", } set :repository, "/home/akishin/src/ruby/2.0/rails/exampleapp" set :deploy_to, "/var/apps/exampleapp" set :scm, :none set :deploy_via, :copy # tar ãã¡ã¤ã«ã®çæå ã¨ã³ãã¼å ãåã(ããã©ã«ã)ã ã¨ã¢ã¼ã«ã¤ããå£ãããããªã®ã§ /tmp 以å¤ãæå® set :copy_remote_dir, "/var/apps" set :copy_exclude, [ "doc", "log", "tmp" ] set :normalize_asset_timestamps, false set :keep_releases, 5 set :use_sudo, false set :user do Capistrano::CLI.ui.ask('SSH User: ') end set :password do Capistrano::CLI.password_prompt('SSH Password: ') end # for Bundler set :bundle_without, [:development, :test] role :web, "localhost" role :app, "localhost" role :db, "localhost", :primary => true namespace :deploy do task :start do ; end task :stop do ; end task :restart, :roles => :app, :except => { :no_release => true } do run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" end_ end
ãã¤ã³ã㯠:scm ã« :none ãæå®ãããã¨ã¨ã:copy_remote_dir ãæ示çã«æå®ãã¦ãã辺ãã
deploy.rb ãä¿åãããã deploy:setup ãå®è¡ãã¦ãããã¤å ã®ãã£ã¬ã¯ããªãä½æãã¾ãã
% cap deploy:setup
ãããã¤ãå®è¡ãã¾ãã
ããã§ã¯ migration ã¯ä¸è¦ã ã£ãã®ã§ãdeploy:cold ã§ã¯ãªã deploy ã«ãã¾ããã
% cap deploy
ãã°ããå¾
ã¤ã¨ :deploy_to ã§æå®ãããã£ã¬ã¯ããªã«ã¢ããªã±ã¼ã·ã§ã³ããããã¤ããã¾ãã
ãã¨ã¯ Apache ã® httpd.conf ã«è¨å®ããå ´æã« current/public ã®ã·ã³ããªãã¯ãªã³ã¯ãå¼µãã° OK ã§ãã
ãã㧠production ã¢ã¼ãã§ã®åä½ã確ããããæã«æ°è»½ã«ãã¼ã«ã«ç°å¢ã§ç¢ºèªããäºãã§ããããã«ãªãã¾ããã
rails s -e production ã®æ¹ãç°¡åã§ããããã®å ´å config.serve_static_assets ãå¤æ´ãããããªãã¨ãããªãã£ããããã®ã§ããã£ã¡ã®æ¹ãè¨å®å¤æ´ãªã©ãä¸è¦ã§ããæ¬çªã¨åãç°å¢ã§ç¢ºèªã§ãããã¨ããã¡ãªããã¯ãããã¨æãã¾ãã
ã¾ããã¨ã¯ããä½ã使ãæ©ä¼ããªãããç¥ãã¾ãããã»ã»ã»ã
ã¡ãªã¿ã«ãã¼ã«ã«ã§ git init ãã¦ããå ´åã¯ä»¥ä¸ã®ãããªè¨å®ã§ãããã¤ã§ãã¾ãã
require "bundler/capistrano" set :application, "ExampleApp" # for rbenv set :default_environment, { 'PATH' => "/home/akishin/.rbenv/shims:/home/akishin/.rbenv/bin:$PATH", } # local repository set :repository, "/home/akishin/src/ruby/2.0/rails/exampleapp" set :local_repository, "/home/akishin/src/ruby/2.0/rails/exampleapp" set :scm, :git set :deploy_via, :copy # tar ãã¡ã¤ã«ã®çæå ã¨ã³ãã¼å ãåã(ããã©ã«ã)ã ã¨ã¢ã¼ã«ã¤ããå£ãããããªã®ã§ /tmp 以å¤ãæå® set :copy_remote_dir, "/var/apps" set :deploy_to, "/var/apps/exampleapp" set :use_sudo, false set :user do Capistrano::CLI.ui.ask('SSH User: ') end set :password do Capistrano::CLI.password_prompt('SSH Password: ') end # for Bundler set :bundle_without, [:development, :test] role :web, "localhost" role :app, "localhost" role :db, "localhost", :primary => true namespace :deploy do task :start do ; end task :stop do ; end task :restart, :roles => :app, :except => { :no_release => true } do run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" end end
ã¨ããããã§ãä½ãå¿ è¦ã«ãªãäºã¯ãªãããç¥ãã¾ãããããã¼ã«ã«ã«ãã Rails ã¢ããªã±ã¼ã·ã§ã³ã Capistrano ã使ã£ã¦ãããã¤ããæ¹æ³ã§ããã