CapistranoでAWS(nginx+unicorn)にデプロイ
Capistrano
編集したファイル
アプリケーション側
- Gemfile
- Capfile
- lib/capistrano/tasks/unicorn.rake
- config/deploy/production.rb
- config/deploy.rb
サーバー側
/etc/nginx/conf.d/myapp.conf
実際の編集は以下のサイトを参考にしました。ありがとうございます。
設定
config/secrets.ymlとconfig/database.ymlをshared/config/にコピーします。
config/deploy.rbに以下を追加します
set :linked_files, %w{ config/database.yml config/secrets.yml }
以下のコマンドでapp_root/sharedディレクトリを作成します。
$ cap deploy:check:make_linked_dirs
コピーのためのタスクを作りました。
lib/capistrano/tasks/cp_config_files.rakeを新規作成します。
#lib/capistrano/tasks/cp_config_files.rake namespace :cp_config_files do task :environment do set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid" set :unicorn_config, "#{current_path}/config/unicorn/#{fetch(:rails_env)}.rb" end def cp_files root_dir = '/home/ec2-user/rails_app' within current_path do execute "cp #{root_dir}/config/database.yml #{root_dir}/shared/config/database.yml;cp #{root_dir}/config/secrets.yml #{root_dir}/shared/config/secrets.yml" end end desc "cp database.yml & secrets.yml" task :cp => :environment do on roles(:app) do cp_files end end end
以下のコマンドでタスクcap cp_config_files:cp が作成されているか確認します。
$ cap --tasks
確認できれば以下のコマンドで実行します。
$ cap staging cp_config_files:cp
これでshared/configにファイルが配置されました。
次のコマンドでシムリンクを張ります。
$ cap staging deploy:symlink:linked_files
以下のコマンドでデプロイします。
bundle exec cap staging deploy
これでデプロイはできますが、デプロイ中のbundle installにやたらと時間がかかるのでチューニングが必要です。
出たエラー
shared/config/database.ymlとsecrets.ymlがないと怒られる
ERROR linked file /home/ec2-user/rails_app/shared/config/database.yml does not exist on 52.24.77.156
手でやれとの事・・・・
上述の通りタスクを作りました。