【Rails】開発環境をSQLite、本番環境をPostgreSQLで構築すると後々面倒なことになるかも?2019-12-22【Rails】開発環境をSQLite、本番環境をPostgreSQLで構築すると後々面倒なことになるかも?Ruby・RailsRailsのデフォルトDBはSQLiteです。アプリケーションを簡単にデプロイできることで人気のPaaSであるHerokuのデフォルトDBはPostgreSQLです。Railsでは環境ごとに異なるDBを利用している場合でも、基本的に問題なく動作します。かの有名なRailsチュートリアルでも、開発環境はSQLite、本番環境(Heroku)はPostgreSQLを使って進んでいきます。*1これまでDBの差異によって特に困ったことがなかったので、開発環境はSQLite、HerokuはPostgreSQLという構成にしていました。先日ついに困ったことが起きました。db:migrateします。:integerendこのmigrationファイルはSQLiteでは問題なく実行できます。PostgreSQLではPG::DatatypeMismatch〜というエラーになってしまいます。PostgreSQLでは、以下のように書くとmigrationを実行できます。integer)'endしかし、これだと今度はSQLiteでエラーが起きてしまいます。SQLiteとPostgreSQLで互換性のある書き方がないということになります。理由がない限り使用するDBは揃えておくべきRails.env.development?やRails.env.production?を使って環境ごとに実行するchange_columnを切り替えることはできますが、今回の事象以外にもDBの違いは少なからずあると思いますし、そもそもDBを統一しておけば発生しない問題です。理由がなければ全ての環境でDBを統一すべきだと再認識しました。この事象に遭遇したアプリケーションは制作中で非公開だったので、どちらの環境もMySQLに統一することで問題を回避しました。