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

  • 59
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

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管理下から外してね」という意図を感じるのにアップロードは自前でやるというのが腑に落ちない。