2017-12-11 4 views
1

foremanでデータベースと移行の両方を実行したいとします。しかし、私は彼らが通常foremanを開始したときに同時に実行されることを発見しました。移行を実行する時点ではまだデータベースが完全には開始されていないため、移行が失敗する原因となります。foremanを使用すると、データベースの起動後にdb migrationを実行できますか?

をご使用の場合、Procfileを使用すると、リリース段階が容易になります。フェーズは、すべてのコマンドが実行された後に実行されます。自分のコンピュータで監督を使って同じことをすることはできますか?

答えて

1

Herokuは、リリースプロセスを維持するためにProcfileに依存しません。 Herokuビルドスタックがあります。

foremanは私たちに順番でプロセスを実行していない、同時に複数のプロセスを実行するための方法を提供しますので、あなたの問題は、しかしforeman

の責任ではないので、あなたがそうする他のいくつかの方法があります。

  1. シンプル:foremanは、シェルコマンドを使用してプロセスを開始することができるので、あなたはあなたのプロセス

    db_process: start_db_script.sh 
    migrarion_process: sleep 5; bundle exec rake db:migrate --trace 
    
  2. フルコントロールを遅延させる(秒)の基本的なシェルコマンドsleepを使用することができます。代わりに、実行時のデフォルトの移行のrakeタスクを実行する前に、移行を実行する前にデータベースへの接続を確認する別のレーキタスクを書くことができます(this answer参照)

    retried = 0 
    begin 
        # Establishes connection 
        ActiveRecord::Base.establish_connection 
        # Try to reconnect 
        # It will raise error if cannot reach your database 
        ActiveRecord::Base.connection.reconnect! 
        Rake::Task["db:migrate"].invoke if ActiveRecord::Base.connected? 
    rescue => e 
        retried += 1 
        if retried <= 5 # Retry only 5 times 
        sleep 1  # Wait 1 seconds before retry 
        retry 
        end 
        puts "#{e} Cannot connect to your database with 5 seconds" 
    end 
    
関連する問題