Edited at

[自分用メモ]Capistrano3のlinked_filesって自分でuploadしなきゃダメですか?

More than 5 years have passed since last update.

RailsアプリをCapistrano3でデプロイするときの話。

config/deploy.rbに


config/deploy.rb

set :linked_files, %w{config/database.yml}


という設定があり、

ここに指定したファイルはsharedディレクトリ配下にシンボリックリンクを作ってくれる。

なのでgitで管理したくないファイルを指定すると良い。

例のようにconfig/database.ymlといったgithubなどで公開したくないファイルを指定する。

しかしシンボリックリンクは貼ってくれるが、ファイルのアップロードは自前でやる模様。

まず、「ほんとに自前でアップロードしなくちゃいけないのか?」というのが疑問。

勝手にローカルからuploadしてほしいんだけど、linked_filesに指定しただけだとダメだった。

というわけでconifg/database.ymlをデプロイ時にアップロードするようにしてみた。


config/deploy.rb

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には


config/deploy.rb

#set :linked_files, %w{config/database.yml}


こんな感じでコメントアウトされた状態で記述されていて、Capistrano3的にも「config/database.ymlはgit管理下から外してね」という意図を感じるのにアップロードは自前でやるというのが腑に落ちない。