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

参照