Skip to content

MigrationToPostgreSQL

Kosuke Tanabe edited this page Apr 25, 2020 · 5 revisions

PostgreSQLへの移行

Next-L Enju Leaf 2.0以降では、PostgreSQLのみをサポートすることになっており、SQLiteやMySQLを使用している場合はPostgreSQLに移行する必要があります。以下にその手順を示します。

  1. まだPostgreSQLがインストールされていない場合、インストールして起動します。

    Ubuntuの場合:

    $ sudo apt install postgresql libpq-dev
    $ sudo systemctl start postgresql
    

    macOSの場合:

    $ brew install postgresql
    $ brew services start postgresql
    
  2. pgloaderをインストールします。

    Ubuntuの場合:

    $ sudo apt install pgloader

    macOSの場合:

    $ brew install pgloader
    
  3. 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
    
  4. 設定ファイル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
    
  5. Gemfileを編集します。

    $ vi Gemfile
    
    # gem 'sqlite3'
    gem 'pg'
  6. PostgreSQL接続用のライブラリであるpggemをインストールします。

    $ bundle install
    
  7. 以下の内容で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'] %>
  8. .envファイルに以下の行を追加します。以下の例は、パスワードにenjupasswordを設定しているものとしています。

    ENJU_LEAF_DATABASE_PASSWORD=enjupassword
    
  9. 移行先のPostgreSQLのデータベースを作成します。

    $ rake db:create:all
    
  10. pgloaderを実行し、データベースをSQLite3からPostgreSQLにコピーします。以下の例では、production環境のSQLite3のデータベースを、PostgreSQLのenju_leaf_productionデータベースにコピーしています。また、PostgreSQLのユーザ名はenju、パスワードはenjupasswordとしています。

    $ pgloader db/production.sqlite3 postgresql://enju:enjupassword@localhost/enju_leaf_production
    
  11. Enjuを起動し、ログインできることを確認します。

    $ foreman start
    
  12. 動作しない場合、設定ファイルを元に戻してください。また、出力されたエラーをIssueにてお知らせください。

    $ cp Gemfile.orig Gemfile
    $ cp Gemfile.lock.orig Gemfile.lock
    $ cp config/database.yml.orig config/database.yml
    $ bundle install
    
Clone this wiki locally