移行を本番データベースにプッシュする際に問題が発生しました。
問題:
私はそれを本番データベースに移行しました:
MacBook-Air-Mac:app msc $ rake db:migrate Rails_ENV = "production" [RailsAdmin] RailsAdminの初期化はデフォルトで無効になっています。必要に応じて、SKIP_Rails_ADMIN_INITIALIZER = falseを渡します。 == AddLengthColumnToBooks:移行========================================= --add_column( :books、:length、:integer)-> 0.0017s == AddLengthColumnToBooks:migrated(0.0019s)============================ ====
新しいDBスキーマが現在本番環境にあると考えて、:length
でいくつかのことを行うコードをデプロイしました。
本番環境で、次のエラーが発生しました。
#の未定義メソッド `length = '
heroku rollback
を実行し、アプリを信頼できる最新バージョンにダウングレードしました。
次に(おそらく少し遅すぎます)、新しいインデックスをロードするには、アプリをheroku restart
する必要があることがわかりました。私はこれを数回行いました。
次にコンソールを開いてBook.column_names
を確認しましたが、length
がありませんでした。
heroku run rake db:migrate
に続いてheroku restart
をもう一度実行しましたが、変更はありません。
別の列を本番データベースに移行しようとしましたが、メッセージがまったく表示されませんでした。p.2の列も表示されませんでした。
更新
Philipe の回答に基づいて、いくつかの追加手順を実行しました。
git add db/schema.rb
、git add db/migrate/20130325103953_add_length_column_to_books.rb
および 'git add db/mergerate /20130401041910_add_duration_column_to_books.rb'。 Gitの答えは次のとおりです。コミットする変更:(ステージングを解除するには、「git reset HEAD ...」を使用)
新しいファイル:db/migrate/20130325103953_add_length_column_to_books.rb新しいファイル:db/mgrate/20130401041910_add_duration_column_to_books.rb変更:db/schema.rb
それから私はgit commit -m "Updating the schema"
をしました。
ここでも、出力は次のとおりです。
3 files changed, 168 insertions(+), 156 deletions(-)
作成モード100644db/migrate/20130325103953_add_length_column_to_books.rb作成モード100644db/migrate/20130401041910_add_duration_column_to_books.rb
次に、heroku run rake db:migrate
を実行します。残念ながら、移行の兆候はなく、単に次のようになりました。
ターミナルに接続されたrake db:migrate
を実行しています... up、run.5428、それだけです。
本番環境のRailsコンソールでは、Book.column_names
を実行しても、長さと期間の両方が不足しています。
今、私はさらにアイデアが不足しています。 `
Herokuに変更をプッシュしているようには見えません。手順は次のとおりです。
git add .
git commit -m "Adding features"
にコミットしますgit Push heroku master
にプッシュします-リモート名としてheroku
を使用していて、master
ブランチで作業していると仮定しますheroku run rake db:migrate
を実行してHEROKUで移行を実行しますheroku restart
を実行しますそれはあなたがあなたを働かせるのに必要なすべてであるはずです。
私も同じ問題を抱えていました。 gitが移行を追加し、gitがそれらをサーバーにプッシュし、capがデプロイしましたが、データベースは変更されませんでした。サーバーに直接ログインし、rake db:migrateを実行すると、コマンドラインで移行が実行されたように見えましたが、何も変更されていません。
私の場合、どういうわけかrake db:migrateが間違ったRails_ENVを使用していました。サーバーにログインして実行しました
rake db:migrate Rails_ENV = production
これにより、データベースで新しい列が作成され、テストデータベースでデバッグしたすべてのコードがサーバーで機能し始めました。
私はちょうど同じ問題を抱えていました。ローカルでDBに列を追加した後、_heroku run rake db:migrate -app [my app name]
_を実行しました。本番環境でコードを実行すると、ActiveRecord::UnknownAttributeError (unknown attribute '_____' for [table name].)
が得られました。
これは私の問題を解決しました:
_heroku restart --app [my app name]
_
私の経験に基づく私の2セント:私はheroku run db:migrate
またdbコンテンツを本番環境に移行しました。番号!構造のみ。したがって、私の場合、ログインはユーザーがいないため、本番環境では機能していませんでした。テストユーザーに再度サインアップする必要があり、それでうまくいきました。それが私のような新人に役立つことを願っています