LoginSignup
75
59

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-01

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

75
59
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
59