2

最近、スキーマの列名を変更しようとしたときにエラーが発生しました。ローカルでは機能しましたが、Herokuでdb:migratedを実行すると、列が存在しないというエラーが表示されました。

これまで、本番スキーマと開発スキーマを統合するのは苦手でした。これはおそらく、ローカルで移行を作成し、db:migrateをローカルで実行し、何らかの理由でローカルで移行を削除してからherokuにプッシュしたため、移行がローカルで実行されましたが、prodでは実行されなかったためです。(これはひどいことだとわかったので、self.downに反対の関数を入力し、rake db:rollbackを実行する必要がありました)

私が知りたいのは、ローカルスキーマとprodスキーマが異なるかどうかを確認するにはどうすればよいですか。また、ローカルのテーブル/列をプロダクションに合わせて変更する方法はありますか?それは本番環境でのみ機能するようで、ローカル環境に役に立たないテーブル/列があることを知っているので。

4

2 に答える 2

7

次のコマンドを使用して、Herokuでbashコンソールを実行できます。

heroku run bash -a app_name

そこから、標準のbashコマンドを使用してファイルシステムをナビゲートし、ファイルをcatschema.rbしてローカルと比較できますschema.rb

スキーマを統合するには、 Rails GuidetoMigrationsのスキーマダンピングの詳細を読むことをお勧めします。スキーマファイルをローカル環境にコピーしてから、 `rake db:reset'を実行すると、開発データベースが削除され、新しいスキーマから再作成されます。データベースのニーズに応じてスキーマをダンプする方法は複数あるため、スキーマダンプの詳細を必ずお読みください。そして明らかに、開始前に必要なものは何でもバックアップしてください。

その時点から、ローカルアプリとHerokuを更新するために、移行を再度正しく開始できるクリーンな状態に戻る必要があります。

于 2012-06-25T12:28:35.440 に答える
4

rake db:schema:dumpHerokuのファイルシステムで正しく動作しないことが文書化されています。

このワンライナーを使用して、Herokuで実行されているRailsアプリケーションのスキーマを印刷できます。

heroku run rails runner "\"sio = StringIO.new; ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, sio); puts sio.string\"" --app [YOUR APP NAME]
于 2012-12-11T22:05:45.910 に答える