記事概要
capistrano3でよく発生するエラーをまとめた記事です。
環境
- centos6.5
- rails4.2.5
- ruby2.3.0
- rbenv
- unicorn
capistrano3とは
capistrano3はデプロイツールです。rubyで記述されているので、railsアプリのdeployと相性が非常に良いです。
ruby以外の言語でも利用できますが、railsだとより多くの機能を利用できます。
公式サイト
エラーについて
capistrano3は便利である反面、うまく動作するまでは、エラーに悩まされます。
特に初心者は、うまく実行できる前に心が折れてしまう可能があります。
なので、よく発生するエラーの修正方法を記載しようと思います。
db:createについて
capistrano3を実行する前には、rake db:createを実行してdatabaseを作成しておく必要があります。
capistrano3は、dbに変更がある場合にdeployと同時にrake db:migrateを実行します。しかし、rake db:createは実行しません。
なので、databaseはあらかじめ作成しておく必要があります。
capistrano3はデプロイ(更新)ツールなので、databaseは作成しません。
なので、rake db:migrateがきちんと動作するように、db:createでdatabaseを前もって作成しておく必要があります。
assetsコンパイルの失敗
はじめてのcapistrano3の実行でassets compileをしようとすると、初回deployで失敗する可能性があります。
この場合、自分でassets compileを実行する必要があります。
cd {project_folder}/current // staging bundle exec rake assets:precompile RAILS_ENV=staging. // production bundle exec rake assets:precompile RAILS_ENV=production.
二回目以降は自動でassets compileが実行されるようになります。これはassets_manifest_backupというフォルダが生成されるからです。
また、assets compileは重い処理です。なので、capistrano3でなく手動で実行するのもありだと思います。
assetsフォルダが読みこまれない
nginxとunicornを連携したrailsアプリをcapistrano3でdeployすると、assetsフォルダ配下がブラウザで読みこまれないケースがあります。
これは、pathが{project_folder}/current/public/assets/になってしまうためです。
なので、nginxでassetsファイルのpathを指定する必要があります。
location ~ ^/assets/ { root /var/www/rails/app/current/public; }
unicorn startの環境設定
capistrano3-unicornを利用してunicornの起動や再起動を実行している人は多いでしょう。
capistrano3-unicornを使ったunicornの起動では、以下のコマンドが実行されています。
execute :bundle, "exec unicorn", "-c", fetch(:unicorn_config_path), "-E", fetch(:unicorn_rack_env), "-D", fetch(:unicorn_options)
見ての通り、unicorn_rack_envの設定が必要になります。この変数は以下のように設定されます。
set :unicorn_rack_env, -> { fetch(:rails_env) == "development" ? "development" : "deployment" }
設定がない場合は、developmentで動作するような実装になっています。
なので、development以外の環境で実行する場合は、明示的に指定してやる必要があります。
set :stage, :staging set :rails_env, 'staging' set :unicorn_rack_env, :staging
set :stage, :production set :rails_env, 'production' set :unicorn_rack_env, :production
上記のように変更したら、deployを実行してみましょう。
cd /vagrant_data/{project_folder} bundle exec cap staging deploy INFO [b8410ed9] Running /usr/local/rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/rails/app/current/config/unicorn/staging.rb -E staging -D as root@192.XXX.XX.XX
きちんとstagingで実行されています。
まとめ
capistrano3は強力なdeployツールです。最初はとっつきにくいしれませんが、慣れると手放せなくなると思います。
私はphpやjavaのdeployでもcapistrano3を利用しています。
本番環境のデプロイは必ず自動化しましょう。できればプロジェクト開始時に設定してしまうのが良いと思います。
プロジェクトの後半になって、deployの自動化を設定しようとしても時間が足りなくて後回しになる可能性があります。
何事も経験です。是非、試してみてください。
以上です。
運営サイト(railsで作成しています)
関連記事
- 【Rails4.2.xx】 Capistrano3を使用する
- rails4.2 site_map.xml capistrano3でdeployする
- rails4.2 site_map.xmlを作成する
0 件のコメント:
コメントを投稿