2017-01-03 15 views
3

Google App Engine(gcloud app deploy)への配備時にRailsの移行をどのように実行しますか?Google App Engineの配備でレールの移行が実行されない

Cloud App Engineを使用してGoogle App EngineにRails 5(Ruby 2.3.1)アプリをデプロイしようとしています。私は、GoogleのBookshelf tutorialとそのGitHub repo for Cloud SQLに記載されている手順に従って、app.yamlとdatabase.ymlを設定しました。

デプロイが正常に完了し、アプリケーションのランディングページを表示できますが、[サインイン]ページまたは[サインアップ]ページに移動すると、[Users]テーブルが作成されていないため500エラーが発生します。

展開ログの

ステップ8

Step 8 : RUN if test -d app/assets -a -f config/application.rb; then  bundle exec rake assets:precompile || true;  fi 

資産プリコンパイルを言及しているようだ。しかし、私は私が展開したときに実行する必要のある、db:createdb:migrateのような何も表示されません。

参考までにrake db:migrateを実行しましたが、ローカルですべてが正常に動作しています。

ありがとうございます!

答えて

0

私はGoogle App Engineに慣れていませんが、一般的なアプローチはrake db:migrateコメントをデプロイスクリプトの一部として実行することです。

私はあなたがdb/schema.rbファイルのGoogle App Engineの更新バージョンへ/プッシュコミットしなかった、db:setupsetupスクリプトの一部として実行されていることをhereを見ることができますか?それに基づいてdb:setupタスクはデータベースの最新バージョンを準備する必要があります。

0

私は同じことをしようとしています。今のところ、私が見つけることができるのはthis pageです。あなたのローカルマシンにMySQL proxyをインストールし、通常のレーキタスク(rake db:setup、db:seedも実行)を実行することもできますが、これは私の最初のテストからはるかに遅いです。うまくいけば、他の誰かがより良い解決策を持っていることでしょう

2

gcloud app deployの実行後に実行されていないことは間違いありません。それらのいくつかが存在するため、コンテナから実行したくない場合もあります。すべてを実行した場合、移行の一部が時々2回実行される競合状態が発生する可能性があります。もう1つは終了する前に実行されます。したがって、展開先のマシン上で実行することは理にかなっています。幸いにも、それはGoogle Cloud SQL Proxyを使用することは簡単です(これはもちろんCloud SQLを使用していることを前提としています)。ドキュメントについては、このリンクを参照してください:gcloud、ログインを使用して次に

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 chmod +x cloud_sql_proxy.linux.amd64 sudo mv cloud_sql_proxy.linux.amd64 /usr/local/bin/cloud-sql-proxy

と一つにデフォルトのプロジェクトを設定します。https://cloud.google.com/sql/docs/mysql/connect-external-app#proxy

まず、我々はクラウドSQLプロキシ自体を(これらは、Linuxのためのものである)に設定しました(クラウドSQLプロキシを接続する方法を把握するのgcloud設定を使用しているため)あなたは現在作業している:

gcloud config set project <your project name> # we don't want to deploy or connect to the wrong project! gcloud auth list # make sure you're dealing with the account you should be gcloud auth application-default login

私はすでに適切な資格情報を持っていないサービスアカウントでログインしていたGoogle Compute Engine VMから導入しているため、最後のステップが必要でした。

次に、クラウドのSQLプロキシソケットディレクトリを設定します。これはPostgresでもうまくいきます。ただ、それは本番の設定が期待する同じディレクトリだことを確認してください:

sudo mkdir /cloudsql sudo chown $USER /cloudsql

を次に、別のウィンドウまたはバックグラウンドでのクラウドSQLプロキシを起動します。

cloud-sql-proxy -dir /cloudsql

その後、あなたのデプロイを実行しますタスクと移行:

gcloud app deploy RAILS_ENV=production rake db:migrate

私はこれを設定したばかりですが、デプロイメントの前に移行を実行すると(長い時間がかかります)、サイトがダウンするという事実に不満を感じました。後で移行を実行すると、ヘルスチェックの設定方法によっては、新しいバージョンが正常でないことが検出されることがあります。 config.active_record.migration_errorがデフォルトでは本番環境に設定されていないため、保留中の移行がある場合にヘルスチェックエンドポイントが例外を発生させるようにヘルスチェックを設定しない限り、展開後に移行を実行することをお勧めします。その後、移行が完了した時点でアプリケーションを新しいバージョンに移行させることができます。しかし、定期的に稼動しているヘルスチェックの性質上、数秒間のダウンタイムがあります。上の2行のスクリプト(デプロイメント後に移行を実行する)は、多大な努力を要することなく、おそらくあなたが得られる最高のものです。

+0

ニース情報私はこの問題にぶち当たっていませんでしたが、私は "ステージング"サービスを設定しなければなりませんでした。そして、私はレールコンソールのステージングを実行しなければなりませんでした。 –

関連する問題