-
Notifications
You must be signed in to change notification settings - Fork 24
MigrationToPostgreSQL
2022年リリース予定のNext-L Enju Leaf 1.4以降では、PostgreSQLのみをサポートすることになっており、SQLiteやMySQLを使用している場合はPostgreSQLに移行する必要があります。以下にその手順を示します。
注意: この作業は、Next-L Enju Leaf 1.3系で実行してください。
-
まだPostgreSQLがインストールされていない場合、インストールして起動します。
Ubuntuの場合:
$ sudo apt install postgresql libpq-dev $ sudo systemctl start postgresql
macOSの場合:
$ brew install postgresql $ brew services start postgresql
-
pgloaderをインストールします。
Ubuntuの場合:
$ sudo apt install pgloader
macOSの場合:
$ brew install pgloader
-
PostgresSQLのユーザを作成します。以下では
enju
という名前のユーザ名を作成しています。$ sudo su postgres # Ubuntuの場合 $ createuser --interactive -P enju Enter password for new role: # データベース接続用のパスワードを決めて入力 Enter it again: # 上記のパスワードを入力 Shall the new role be a superuser? (y/n) n # nと答える Shall the new role be allowed to create databases? (y/n) y # nと答える Shall the new role be allowed to create more new roles? (y/n) y # nと答える
誤ってユーザを作成した場合は、以下のコマンドでユーザを削除して再度作成してください。
$ dropuser enju
-
設定ファイル
Gemfile
,Gemfile.lock
,config/database.yml
のバックアップを取ります。$ cd enju_leaf_13 $ cp Gemfile Gemfile.orig $ cp Gemfile.lock Gemfile.lock.orig $ cp config/database.yml config/database.yml.orig
-
Gemfileを編集します。
$ vi Gemfile
# gem 'sqlite3' gem 'pg'
-
PostgreSQL接続用のライブラリである
pg
gemをインストールします。$ bundle install
-
以下の内容で
config/database.yml
を再作成します。以下の例は、データベース接続用ユーザ名にenju
、パスワードにenjupassword
を設定しているものとしています。default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: enju development: <<: *default database: enju_leaf_test password: enjupassword test: <<: *default database: enju_leaf_test password: enjupassword production: <<: *default database: enju_leaf_production # データベース名 password: <%= ENV['ENJU_LEAF_DATABASE_PASSWORD'] %>
-
.env
ファイルに以下の行を追加します。以下の例は、パスワードにenjupassword
を設定しているものとしています。ENJU_LEAF_DATABASE_PASSWORD=enjupassword
-
移行先のPostgreSQLのデータベースを作成します。
$ rake db:create:all
-
pgloaderを実行し、データベースをSQLite3からPostgreSQLにコピーします。以下の例では、production環境のSQLite3のデータベースを、PostgreSQLの
enju_leaf_production
データベースにコピーしています。また、PostgreSQLのユーザ名はenju
、パスワードはenjupassword
としています。$ pgloader db/production.sqlite3 postgresql://enju:enjupassword@localhost/enju_leaf_production
-
Enjuを起動し、ログインできることを確認します。
$ foreman start
-
動作しない場合、設定ファイルを元に戻してください。また、出力されたエラーをIssueにてお知らせください。
$ cp Gemfile.orig Gemfile $ cp Gemfile.lock.orig Gemfile.lock $ cp config/database.yml.orig config/database.yml $ bundle install