web-dev-qa-db-ja.com

Heroku run rake db:migrateはデータベースに変更を加えず、アプリは数回再起動しました

移行を本番データベースにプッシュする際に問題が発生しました。

問題:

  1. 1列を追加してデータベーススキーマを変更しました。
  2. 私はそれを本番データベースに移行しました:

    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)============================ ====

  3. 新しいDBスキーマが現在本番環境にあると考えて、:lengthでいくつかのことを行うコードをデプロイしました。

  4. 本番環境で、次のエラーが発生しました。

    #の未定義メソッド `length = '

  5. heroku rollbackを実行し、アプリを信頼できる最新バージョンにダウングレードしました。

  6. 次に(おそらく少し遅すぎます)、新しいインデックスをロードするには、アプリをheroku restartする必要があることがわかりました。私はこれを数回行いました。

  7. 次にコンソールを開いてBook.column_namesを確認しましたが、lengthがありませんでした。

  8. heroku run rake db:migrateに続いてheroku restartをもう一度実行しましたが、変更はありません。

  9. 別の列を本番データベースに移行しようとしましたが、メッセージがまったく表示されませんでした。p.2の列も表示されませんでした。

私はここで何が間違っているのですか?

更新

Philipe の回答に基づいて、いくつかの追加手順を実行しました。

  1. git add db/schema.rbgit add db/migrate/20130325103953_add_length_column_to_books.rbおよび 'git add db/mergerate /20130401041910_add_duration_column_to_books.rb'。 Gitの答えは次のとおりです。
  2. コミットする変更:(ステージングを解除するには、「git reset HEAD ...」を使用)

    新しいファイル:db/migrate/20130325103953_add_length_column_to_books.rb新しいファイル:db/mgrate/20130401041910_add_duration_column_to_books.rb変更:db/schema.rb

  3. それから私はgit commit -m "Updating the schema"をしました。

  4. ここでも、出力は次のとおりです。

     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

  5. 次に、heroku run rake db:migrateを実行します。残念ながら、移行の兆候はなく、単に次のようになりました。

    ターミナルに接続されたrake db:migrateを実行しています... up、run.5428、それだけです。

  6. 本番環境のRailsコンソールでは、Book.column_namesを実行しても、長さと期間の両方が不足しています。

今、私はさらにアイデアが不足しています。 `

16
rhjs

Herokuに変更をプッシュしているようには見えません。手順は次のとおりです。

  1. ローカルコードに変更を加える
  2. 移行をローカルで実行する
  3. 変更されたすべてのファイルをGitに追加しますgit add .
  4. 追加されたすべてのファイルをgitgit commit -m "Adding features"にコミットします
  5. 変更をHerokugit Push heroku masterにプッシュします-リモート名としてherokuを使用していて、masterブランチで作業していると仮定します
  6. 移行がある場合は、heroku run rake db:migrateを実行してHEROKUで移行を実行します
  7. 次の移行はheroku restartを実行します

それはあなたがあなたを働かせるのに必要なすべてであるはずです。

35
John Beynon

私も同じ問題を抱えていました。 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
Raymond Gan

私の経験に基づく私の2セント:私はheroku run db:migrateまたdbコンテンツを本番環境に移行しました。番号!構造のみ。したがって、私の場合、ログインはユーザーがいないため、本番環境では機能していませんでした。テストユーザーに再度サインアップする必要があり、それでうまくいきました。それが私のような新人に役立つことを願っています

0
Pere