Capistrano3から一時撤退するという話
デプロイ環境を整えるべく、2013年6月にリリースされた新しいバージョンでCapistrano3を設定しようと試みました。
結果、一時撤退するという話なので、身のある内容ではないです。ほぼ自分用のメモ。
主に以下を参考にしました。
・https://github.com/capistrano/capistrano
・公式ドキュメント
・capistrano 3.x系を使ってrailsをデプロイ
・Capistrano3で快適デプロイ生活!!
・Capistrano 3への手引き
・Capistrano 3を使ってみる
・SSH認証キーをBitbucket/GitHubに設定しよう![Mac簡単手順](bitbucket連携)
・https://github.com/capistrano/rails
・https://github.com/capistrano/rbenv
まず、gemを入れた。
group :development do gem 'capistrano', '~> 3.0.1' gem 'capistrano-rails' gem 'capistrano-rbenv', github: "capistrano/rbenv" end
で、
$ bundle install $ rbenv rehash # gemでbundle installしたやつを効かせる(capコマンドなど) $ bundle exec cap install #これで必要なファイルとかインストールされる
$ bundle exec cap -T #コマンド類はこれで確認できる
Capfile
require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/rbenv' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
production.rb
set :stage, :production set :branch, 'master' role :all, %w{admin@appname.com} server 'appname.com', user: 'username', port: 'port_number', roles: %w{web app db}, my_property: :my_value
deploy.rb
set :application, 'appname.com' set :repo_url, 'git@bitbucket.org:user/myapp.git' set :user, 'username' set :branch, 'master' set :rbenv_type, :user # or :system, depends on your rbenv setup set :rbenv_ruby, '2.0.0-p247' set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec" set :rbenv_map_bins, %w{rake gem bundle ruby rails} set :rbenv_roles, :all # default value set :deploy_to, '/usr/share/nginx/www/appname' set :keep_releases, 5 namespace :deploy do desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do # Your restart mechanism here, for example: # execute :touch, release_path.join('tmp/restart.txt') end end after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do # Here we can do anything such as: # within release_path do # execute :rake, 'cache:clear' # end end end after :finishing, 'deploy:cleanup' end
この状態でとりあえず、以下コマンドで動かしてみた。
$ bundle exec cap production deploy:check #確認 $ bundle exec cap production deploy #これでこけまくる
何やら、mkdirしたりするときなどにパーミッションが欲しいのだけど、そこでこけたりしてるみたい。
バージョン3から、それまで使われていたset :use_sudoやdefault_run_optionsが使えなくなってる。
で、公式ドキュメント(http://www.capistranorb.com/documentation/getting-started/authentication-and-authorisation/)を見ると、passwordless sudoが良いとあるので、やってみる。
visudoで
username ALL=NOPASSWD:ALL (あえて全コマンドで)
として、やってみるが、効いてないっぽい。ここでvisudo裏ワザっぽいリンク発見。(リンク忘れてしまったw)曰く、visudoの一番下に書くと効くらしい、とのことでやってみると効いた。
がこれでも、
ユーザーのsudoをパスワードレスにはできてるぽいんだけど、そもそも、cap deployしてるときに
sudo実行してくれてない!?とかで、permission deniedされる事案発生。
そもそも、homeディレクトリではsudo無しでmkdirできるけど、appのディレクトリではsudoでないとmkdirできない。→sudo無しでmkdirできるようパーミッションいじるか、capistranoでsudoさせるようにするか、、いずれにせよやり方わからんーーーーー
・http://stackoverflow.com/questions/20615484/when-capistrano3-does-mkdir-permission-denied?noredirect=1#comment30852649_20615484
・http://qa.atmarkit.co.jp/q/3386
stackoverflow、qa@itを駆使したが解決しなそうなので、一旦撤退…
インフラ周りできる人に会った際に聞いてみよう。
この辺やったあと、nginx連携とか、puma連携とかあったのに、、道は長し。。
・https://github.com/puma/puma
・https://github.com/ivalkeen/capistrano-nginx
・https://github.com/puma/puma/blob/master/docs/nginx.md