かなりずるい配備方法
Gitのmasterブランチにpushして、レビューとかテストを通ったものを配備する、というのがcapistranoのデプロイですが、思いっきり処理を端折った配備タスクを作りました。一見ややこしいですが、指定したサーバにrsyncでローカルのファイルを送っているだけです。
config/deploy/development.rb
server 'example.jp', user: 'username', roles: %w{web}
lib/capistrano/tasks/sync.rake
desc 'Sync files directly. (Only for development stage)'
task :sync do
break unless fetch(:stage) == :development
roles(:all).each do |s|
n = ""
host = s.hostname
path = "./"
rpath = fetch(:deploy_to)+"/current/"
puts "Syncing files to #{host}:#{rpath}."
puts `rsync -avz#{n} --delete --exclude "tmp" --exclude "log" --exclude ".git" #{path} #{host}:#{rpath}`
# env = "development"
# puts `ssh #{host} "cd #{rpath} && bundle install"`
# puts `ssh #{host} "cd #{rpath} && bundle exec rake db:migrate RAILS_ENV=#{env}"`
end
end
以下のように実行します。
$ cap development sync
Mac上にVagrantを立ち上げて開発をしていますが、Railsプロジェクト上のrakeコマンドはbundleが揃ってないと実行できないため、ここに開発用のタスクを定義すると、Vagrant上でしか実行できなくなってしまうんですね。Mac側だとmysqlやImageMagick絡みのgemがインストールし辛いため、ちょっとした作業の度「vagrant up」が面倒でした。ところがcapコマンドの方はbundleの状態に関わらず実行できるため、ここに実装するとお手軽です。
参考URL
- タグ別一覧: [capistrano] [rails]
- チップス一覧
この記事は役に立ちましたか?
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について