Capistrano3でsqlite3を使用しているコードをデプロイする

基本的にMySQLのデプロイと同じですが、sqliteの場合はデータベースをファイル(production.sqlite3など)で管理しているので、デプロイするたびに新しくデータベースのファイルが作成されてしまうという現象がおきました。

これには、dbを作成する直前に以前の『db/<環境変数>.sqlite3』のデータをcurrentのdb以下にコピーするようにしました。

namespace :deploy do
  task :copy_sqlite do
    on roles(:db) do
      execute :cp, "#{current_path}/db/#{fetch(:rails_env)}.sqlite3", "#{release_path}/db/"
    end
  end
  
  # db作成などのタスク
  
  before :updated, 'copy_sqlite'
  
  # db作成などの処理
end
  

 

参照:http://stackoverflow.com/questions/23067439/how-to-deploy-rails-sqlite3-database-with-capistrano