#author("2019-10-12T04:05:23+00:00","default:wikiwriter","wikiwriter") #author("2020-01-03T15:01:46+00:00","default:wikiwriter","wikiwriter") &tag(Capistrano); *目次 [#j8aad278] #contents *関連ページ [#xc2eea32] -[[Rails]] -[[Rails3]] -[[Capistrano3]] *参考情報 [#j24c1780] -書籍: パーフェクトRuby *概要 [#ge3a936b] -以下Capistrano 2に関する情報 -最新は[[Capistrano3]]を参照のこと。 *インストール [#i4eb383d] -gemでインストール gem install capistrano capistrano_colors *デプロイ用の設定ファイルの作成 [#v883c334] -自分のRailsアプリのフォルダに移動しcapifyコマンドを実行する。 cd ~/myapp capify . -config/deploy.rbというファイルが作成される。 *設定ファイルの編集 [#v03db165] -config/deploy.rbを編集。以下のようなテンプレートが書きだされている。 #pre{{ set :application, "set your application name here" set :repository, "set your repository location here" # set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based o\ n known version control directory names # Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` role :web, "your web-server here" # Your HTTP server, Apache/etc role :app, "your app-server here" # This may be the same as your `Web` ser\ ver role :db, "your primary db-server here", :primary => true # This is where Rails migrations will ru\ n role :db, "your slave db-server here" }} **lsタスクの作成 [#s15ac9e4] -[[Capistranoを使ったデプロイ | アライドアーキテクツ エンジニアブログ:http://tech.aainc.co.jp/archives/3773]]にあるように、まずは、サーバー上でlsを実行するサンプルを作るのがわかりやすいかも。 -deploy.rbを編集 #pre{{ # sshのユーザー名 set :user, "demouser" # ssh公開鍵設定 set :ssh_options, :port=>11111 :forward_agent=>false, :keys=>"~/.ssh/id_rsa_demo", :passphrase => "demopassphrase" # sudoするかどうか(sudoしないほうが普通らしい) set :use_sudo, false # デプロイサーバ定義 role :web, "demohost" # lsコマンド実行タスク task :list do run "ls" end }} -以下のコマンドで実行。 cap list -rubyのNet::SSHというライブラリを使い、ssh経由でログインしてlsを実行するイメージ。パスフレーズを直書きすることになるのが気になる場合、毎回パスフレーズを入力する / ssh-agentを使う(起動ごとに1回は入力必要) / パスフレーズなしのキーを使うなどの回避方法がある。調べた限り、Macのキーチェインを使う方法はなさそうだった。 **デプロイ実行 [#ie76c58d] -deploy.rbに設定を追加する #pre{{ set :user, "demouser" # ssh公開鍵設定 set :ssh_options, :port=>11111 :forward_agent=>false, :keys=>"~/.ssh/id_rsa_demo", :passphrase => "demopassphrase" # sudoするかどうか(sudoしないほうが普通らしい) set :use_sudo, false # アプリケーション名 set :application, "demoapp" # scmの指定 set :scm ,:git # gitリポジトリ set :repository, "git@gitserver:demoapp.git" # gitブランチ名 set :branch, :master # デプロイ方式。:copyの場合手元でソースを最新にしてからコピーする。 # :checkoutの場合サーバー上でgitリポジトリに接続して更新するらしい。 set :deploy_via , :copy # deploy先ディレクトリ(サーバーのディレクトリ) set :deploy_to, "/var/www/html/demo" # デプロイサーバ定義 role :web, "demohost" # lsコマンド実行タスク task :list do run "ls" end }} -デプロイ実行の準備(初回やデプロイ先がかわるなどのごとに実行する必要あり)。 cap deploy:setup -デプロイ実行 cap deploy -サーバー上にファイルがあるかどうか確認する。 ***デプロイ先がPassengerの場合 [#t0b3b2d8] -deploy.rbの下のほうのコメントアウトされている部分を有効にする。 #pre{{ # If you are using Passenger mod_rails uncomment this: 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')}" en }} ***デプロイ先でrbenv+bundlerを使っている場合 [#xbf97da0] -bundlerを使っている場合、bundler/capistranoを、rbenvを使っている場合、capistrano-rbenvを使う。deploy.rbに以下を追加。 #pre{{ require "bundler/capistrano" require "capistrano-rbenv" set :rbenv_ruby_version, "1.9.3-p429" }} -デプロイ先でbundlerを実行するので、Gemfile.lockをバージョン管理に入れておく(そうしないとエラーになる)。 *Tips [#o228eb8e] **複数環境にdeployする場合の設定 [#b7d776f9] -[[Capistrano で簡単に複数サイトへのデプロイを行えるようにする - @yuumi3のお仕事日記:http://d.hatena.ne.jp/yuum3/20110316/1300256239]] **複数の設定ファイルを使う方法 [#qafbc98d] -標準ではconf/deploy以下にproduction.rbとstaging.rbが作られるが、それ以外にも設定を追加したいことがある。 -この場合単にconf/deploy以下に*.rbファイルを作成すればよい。例えば conf/deploy/vps.rb -以下のように一向するとvps.rbが使用される bundle exec cap vps deploy *トラブルシューティング [#hd3059f6] **Capistrano 2でNet::SSH::AuthenticationFailedがエラー。 [#d1932e47] -[[CapistranoでSSHのパスワード入力プロンプトが出ずにNet::SSH::AuthenticationFailedエラーとなる問題の解決法あれこれ - Qiita:http://qiita.com/takashibagura/items/33034c7529b553d2d0f9]]にあるようにGemfileでnet-sshのバージョンを固定する。 #pre{{ gem "net-ssh", "2.7.0" }} **インストール先のanyevn経由のrbenvが見つからない [#xa189d69] -例えば以下のようなエラーが発生する。 #pre{{ 00:00 rbenv:validate WARN rbenv: 2.6.3 is not installed or not found in $HOME/.rbenv/versions/2.6.3 on mauve }} -以下のようにシンボリックリンクを張れば解決? ln -s .anyenv/envs/rbenv .rbenv