2012-02-03 9 views
-1

私は最近、私のレールアプリにdevise確認可能なモジュールを追加しました。私のアプリケーションはdevでうまく動作します。しかし、私は英雄にそれをプッシュすると、 "申し訳ありませんが、何かが間違っていました"と言います。以下は、私のHerokuのは、データベースが「confirmed_at」の列を持っていないことは明らかであるheroku rails appデータベースの移行に関する問題

Rendered devise/confirmations/new.html.erb within layouts/application (2.7ms) 
2012-02-03T01:55:07+00:00 app[web.1]: Rendered devise/shared/_links.erb (0.5ms) 
2012-02-03T01:55:07+00:00 app[web.1]: cache: [GET /users/confirmation/new] miss 
2012-02-03T01:55:07+00:00 app[web.1]: Completed 200 OK in 19ms (Views: 16.9ms | ActiveRecord: 0.0ms) 
2012-02-03T01:55:07+00:00 heroku[router]: GET personaldiary.herokuapp.com/users/confirmation/new dyno=web.1 queue=0 wait=0ms service=42ms status=200 bytes=1540 
2012-02-03T01:55:11+00:00 app[web.1]: 
2012-02-03T01:55:11+00:00 app[web.1]: 
2012-02-03T01:55:11+00:00 app[web.1]: Started POST "https://stackoverflow.com/users/confirmation" for 50.131.164.83 at 2012-02-03 01:55:11 +0000 
2012-02-03T01:55:11+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"iVVTpWgIrBTR8b9k07lr2tYDFQfAYD0R8JmGVkmfzl4=", "user"=>{"email"=>"[email protected]"}, "commit"=>"Resend confirmation instructions"} 
2012-02-03T01:55:11+00:00 app[web.1]: Processing by Devise::ConfirmationsController#create as HTML 
2012-02-03T01:55:11+00:00 app[web.1]: Completed 500 Internal Server Error in 4ms 
2012-02-03T01:55:11+00:00 app[web.1]: 
2012-02-03T01:55:11+00:00 app[web.1]: NameError (undefined local variable or method `confirmed_at' for #<User:0x000000023254e0>): 
2012-02-03T01:55:11+00:00 app[web.1]: 
2012-02-03T01:55:11+00:00 app[web.1]: cache: [POST /users/confirmation] invalidate, pass 
2012-02-03T01:55:11+00:00 app[web.1]: 

を対数です。次のように私の移行ファイルは次のとおりです。

class AddConfirmableToDeviseV1 < ActiveRecord::Migration 
    def up 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at, :datetime 
    add_column :users, :confirmation_sent_at , :datetime 

    add_index :users, :confirmation_token, :unique => true 
    end 

    def down 
    remove_index :users, :confirmation_token 

    remove_column :users, :confirmation_sent_at 
    remove_column :users, :confirmed_at 
    remove_column :users, :confirmation_token 
    end 
end 

私の生産は、Herokuの上でホストされている:

だから私は

heroku run rake db:migrate 

を走ったそれは私に何も出力を与えませんでした。

その後、私はそれはまた、

heroku run rake db:migrate --trace 

** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Invoke db:load_config (first_time) 
** Invoke rails_env (first_time) 
** Execute rails_env 
** Execute db:load_config 
** Execute db:migrate 
** Invoke db:schema:dump (first_time) 
** Invoke environment 
** Invoke db:load_config 
** Execute db:schema:dump 
次に私を与えてくれ

== AddConfirmableToDeviseV1: reverting ======================================= 
-- remove_index(:users, :confirmation_token) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

Index name 'index_users_on_confirmation_token' on table 'users' does not exist 

Tasks: TOP => db:rollback 

を与えた

heroku run rake db:rollback 

を走りました210

この問題を解決する方法はありますか?

+0

db:migrateを--traceで実行して、出力があるかどうか確認できますか? –

+0

** DBを起動します(FIRST_TIME) を移行**環境(FIRST_TIME) を起動します**環境 を実行します**デシベル起動しますload_config(FIRST_TIME) を** RAILS_ENV(FIRST_TIME) を起動します** RAILS_ENV を実行します**実行DB:load_config **デシベルを実行します。 を移行**デシベル起動します:スキーマを:スキーマ:load_config **デシベルを実行します。 を(FIRST_TIME)ダンプ**環境 を起動します** DBが起動 – riship89

+0

はあなたが複数のアプリケーションのセットアップを持っているダンプヘロクで? –

答えて

0

問題。

マイグレーションファイルを削除しました。マイグレーションの変更方法にdeviseヘルパーの新しいマイグレーションファイルが追加されました。

class AddConfirmableToDevise < ActiveRecord::Migration 
    def change 
     change_table(:users) do |t| 
      t.confirmable 
     end 
     add_index :users, :confirmation_token, :unique => true 
    end 
end 

heroku run rake db:migrate 

に再び移行を実行し、ちょっと待って...それが働きました。これはどういう意味があるのか​​分かりませんが、うまくいきました。コメントを残してください、私は説明を読んで熱心です。

とにかく、ありがとうございます。

+0

に置き換えるので、これは必要ありません。しかし、herokuは上下の方法をサポートしていないようです。誰でもこれを確認してもらえますか? – riship89

1

マイグレーションが運用データベースに対して実行されていることを確認する必要があります。

これは、ローカルの環境が本番運用データベースにアクセスできることを前提としています。

(注:これは一般的なコメントされて - ないHerokuの具体的な答えは - 「Herokuのは、すくいデシベルを実行します。移行は」明らかに本番Herokuの環境に対してマイグレーションを実行するための正しい方法です)解決

+0

私はすくいデシベルを実行しました:移行します。それは私に何も与えなかった。 rake db:rollbackを実行しました。それは言う。テーブル 'users'のインデックス名 'index_users_on_confirmation_token'が存在しません – riship89

+0

そのRAILS_ENVコマンドをどこで実行するのですか? – riship89

+2

Herokuがデフォルトにする必要があり、database.ymlを独自の –

関連する問題