3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Capistranoでdbロールが複数設定されていてもdb:migrateは1回しか実行されない

Last updated at Posted at 2020-01-30

検証したい事

複数 serverdb ロールが設定されている場合、db:migrate が複数回実行されるのでは??
気になり調査、検証してみました。

結果

db:migrate は1回だけ実行されるように配慮された実装になっていました。
capistrano/tasks/migrations.rake#L38

また、定義順序を変更して検証をしてみると、最初に定義されている server で実行されました。

server定義順序を変更した検証

パターン1

capistrano

# app01.com、app02.comの順に記述
server 'app01.com', user: 'ssh-user', roles: %w{app db}
server 'app02.com', user: 'ssh-user', roles: %w{app db}

deploy実行ログ
app01.comでdb:migrateが実行された


** Invoke deploy:migrating (first_time)
** Invoke deploy:set_rails_env
** Execute deploy:migrating
  INFO [79c7f9ef] Running /usr/local/rbenv/bin/rbenv exec bundle exec rake db:migrate as ssh-user@app01.com
  INFO [1661fd3f] Finished in 3.259 seconds with exit status 0 (successful).

パターン2

capistrano

# app02.com、app01.comの順に記述
server 'app02.com', user: 'ssh-user', roles: %w{app db}
server 'app01.com', user: 'ssh-user', roles: %w{app db}

deploy実行ログ
app02.comでdb:migrateが実行された

** Invoke deploy:migrating (first_time)
** Invoke deploy:set_rails_env
** Execute deploy:migrating
  INFO [79c7f9ef] Running /usr/local/rbenv/bin/rbenv exec bundle exec rake db:migrate as ssh-user@app02.com
  INFO [1661fd3f] Finished in 3.259 seconds with exit status 0 (successful).

まとめ

dbロールが複数定義されていても、db:migrate は1回しか実行されません。
とはいえ、誤解が生じないよう特定の server 1つだけにdbロールは定義したほうが良いですね。

server 'app01.com', user: 'ssh-user', roles: %w{app db}
server 'app02.com', user: 'ssh-user', roles: %w{app}
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?