RailsアプリをCapistrano3でデプロイするときの話。
config/deploy.rbに
set :linked_files, %w{config/database.yml}
という設定があり、
ここに指定したファイルはsharedディレクトリ配下にシンボリックリンクを作ってくれる。
なのでgitで管理したくないファイルを指定すると良い。
例のようにconfig/database.ymlといったgithubなどで公開したくないファイルを指定する。
しかしシンボリックリンクは貼ってくれるが、ファイルのアップロードは自前でやる模様。
まず、「ほんとに自前でアップロードしなくちゃいけないのか?」というのが疑問。
勝手にローカルからuploadしてほしいんだけど、linked_filesに指定しただけだとダメだった。
というわけでconifg/database.ymlをデプロイ時にアップロードするようにしてみた。
namespace :deploy do
desc 'Restart application'
task :restart do
invoke 'unicorn:start'
end
desc 'Upload database.yml'
task :upload do
on roles(:app) do |host|
if test "[ ! -d #{shared_path}/config ]"
execute "mkdir -p #{shared_path}/config"
end
upload!('config/database.yml', "#{shared_path}/config/database.yml")
end
end
before :starting, 'deploy:upload'
after :finishing, 'deploy:cleanup'
end
deploy:uploadタスクはlinked_filesすべてをアップロードするようにしたほうが使い勝手が良いんだろうけど今回はとりあえずこれで良いと思う。
これでconfig/database.ymlをgit管理下から外した状態でデプロイはできた。
しかしもっと楽な方法がある気がするんだけどよくわからなかった。
cap installしてできたconfig/deploy.rbには
#set :linked_files, %w{config/database.yml}
こんな感じでコメントアウトされた状態で記述されていて、Capistrano3的にも「config/database.ymlはgit管理下から外してね」という意図を感じるのにアップロードは自前でやるというのが腑に落ちない。