Вопросы переноса базы данных приложения Heroku Rails - PullRequest
0 голосов
/ 03 февраля 2012

Я недавно добавил разработчик подтверждающего модуля в мое приложение rails. Мое приложение хорошо работает в dev. Но, когда я толкаю его к героку, он говорит: «Извините, но что-то пошло не так». Следующее - это мой журнал героки-

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 "/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"=>"hrishikeshp19@gmail.com"}, "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]: 

Понятно, что в базе данных нет столбца "Verified_at". Мой файл миграции выглядит следующим образом:

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 run rake db:migrate

Это не дало мне никакого выхода.

Тогда я побежал

heroku run rake db:rollback

Это дало мне

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

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Вам определенно нужно будет убедиться, что ваши миграции были выполнены для производственной базы данных.

RAILS_ENV=production rake db:migrate

Это предполагает, что ваша локальная среда, конечно, может получить доступ к производственной базе данных.

(Примечание: это общий комментарий, а не конкретный ответ heroku: "heroku run rake db: migrate", по-видимому, является правильным способом запуска миграций против рабочей среды Heroku)

0 голосов
/ 03 февраля 2012

Проблема решена.

Я удалил свои файлы миграции. Добавлен новый файл миграции с devise helper в методе изменения миграции.

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

И ... это сработало. Я не знаю, как это имеет смысл, но я рад, что это сработало. Пожалуйста, оставляйте комментарии, мне интересно читать объяснения.

В любом случае, спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...