#author("2020-04-27T08:33:15+00:00","default:wikiwriter","wikiwriter") #author("2020-04-29T03:30:07+00:00","default:wikiwriter","wikiwriter") &tag(Capistrano3); *目次 [#h2c8944f] #contents *関連ページ [#p990e6ae] -[[Capistrano]] -[[./アップグレード]] -[[./基本]] -[[capistrano-git-copy]] -[[./deploy_via_copyする]] -[[./Tips]] -[[./トラブルシューティング]] *参考情報 [#i3b863a7] -[[capistrano/CHANGELOG.md at master · capistrano/capistrano:https://github.com/capistrano/capistrano/blob/master/CHANGELOG.md]] -[[Upgrading from v2.x.x:http://capistranorb.com/documentation/upgrading/]] -[[capistrano 3.x系を使ってrailsをデプロイ | iii ThreeTreesLight:http://threetreeslight.com/post/68344998681/capistrano-3-x-rails]] -[[capistrano をバージョン 3 にアップデートして時代の流れに乗る - けんごのお屋敷:http://tkengo.github.io/blog/2013/12/12/version-up-capistrano-v3/]] … v2との違いなど -[[入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい | GREE Engineers' Blog:http://labs.gree.jp/blog/2013/12/10084/]] … 丁寧な解説。 -Rails用のデプロイツールとしてminaというものもある。しかし依然としてCapistrano3のほうがメジャーな模様。 *Tips [#b1c4e757] **初回データベースやユーザーの生成をどうするか [#m9c90091] -[[Capistrano3で快適デプロイ生活!! - Less is Best:http://yss44.hatenablog.com/entry/2013/12/01/150215]]のように別タスクとして保存しておけばいいかもしれない。 #pre{{ #> dbサーバーのデータベースを生成するタスク。 #> デプロイ前に実行する必要がある。 task :db_create do on roles(:db) do |host| q1 = 'CREATE DATABASE IF NOT EXISTS <app_name>;' q2 = 'GRANT ALL ON <app_name>.* TO <app_user>@localhost IDENTIFIED BY "<app_passsword>";' q3 = "FLUSH PRIVILEGES;" sql = "#{q1}#{q2}#{q3}" execute "mysql --user=<mysql_user> --password=<msql_password> -e '#{sql}' " end end }} **passengerを再起動したい [#kc27af13] -apache passengerはtmp/restart.txtを見て再起動してくれる。 -そこで以下のような設定をdeploy.rbに追加しておくといいらしい。 #pre{{ namespace :deploy do after :restart, :restart_passenger do on roles(:web), in: :groups, limit: 3, wait: 10 do within release_path do execute :touch, 'tmp/restart.txt' end end end after :finishing, 'deploy:restart_passenger' end end }} -passengerは再起動したあとtmp/restart.txtを削除するという説としないという説がある。 -再起動したかどうかログにも書き出されずよくわからない。 **staging環境で使用したい [#i1307ad0] -staging環境にdeployしたい場合、config/deploy/staging.rbを指定するだけではだめで、Rails側でstaging環境を設定しておかないといけない。[[Capistrano3を最後にもう一度だけ懇切丁寧にまとめてみる - そのねこが学ぶとき:http://chroju89.hatenablog.jp/entry/2014/04/12/215628]] -以下手順。 -config/database.ymlにstaging環境を追加する。production:をstaging:にコピー。 -config/secrets.ymlにstaging環境を追加する。production:をstaging:にコピー。 -config/environments/staging.rbを作成。production.rbをstaging.rbにコピーして作成する。 -config/deploy/stating.rbを作成。rails_envをstagingに指定したり、ssh関連の設定を追加する。 set :rails_env, "staging" -手元環境でとりあえず起動してみる bundle exec rails s -e staging -deployする bundle exec cap staging deploy **sharedへのリンク [#mc134145] -deploy.rbでコメントアウトされているlinkd_dirsをコメントアウトする。 set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/uploads') **GitHubのプライベートリポジトリで公開しているgemを使う [#z7c32127] -[[プライベートリポジトリで提供しているgemを使ったアプリをHerokuにデプロイする。 - satoryuの日記:https://satoryu.hatenablog.com/entry/use_private_rubygem_on_github]] -ローカル環境ではアクセストークンを発行し以下のように設定する。 bundle config github.com *********:x-oauth-basic -Capistranoなどを使ってリモートにdeployしたい場合、.bashrcに以下を追加 export BUNDLE_GITHUB__COM=******:x-oauth-basic *FAQ [#v91a0669] **ロールってなに? [#p9dcdd23] -サーバーごとに役割を設定するもの。[[Rails - はじめてのCapistrano - Qiita:http://qiita.com/mosson/items/1a4cfd01cb538f2d8f0e]]の説明がわかりやすいかも。Capistrano3もCapistrano2も考え方に大差はない。 -Capistranoではタスクは、デフォルトでは全ロール、全サーバーに対して実行できる。タスクに対し例えばwebロールを割り当てると、webロールのサーバーに対してしか処理が行われなくなる。 **設定ファイルの、role、serverの意味ってなに? [#j2801aa6] -cap installで以下のような設定ファイルが作成される。 #pre{{ role :app, %w{deploy@example.com} role :web, %w{deploy@example.com} role :db, %w{deploy@example.com} # Extended Server Syntax # ====================== # This can be used to drop a more detailed server definition into the # server list. The second argument is a, or duck-types, Hash and is # used to set extended properties on the server. server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value }} -コメントによると、roleは、ロールとサーバーの簡易同時設定。serverはサーバーの詳細設定(既存ロール使用)といったイメージか。