Heroku导致迁移问题

时间:2011-03-18 12:39:47

标签: ruby-on-rails ruby-on-rails-3 heroku

我现在在git中遇到以下错误:

Home@PC /c/rails/konkurranceportalen (master)
    $ heroku rake db:migrate
    (in /app/x/home)
    ==  DeviseCreateAdmins: migrating =============================================
    -- create_table(:admins)
       -> 0.0148s
    -- add_index(:admins, :email, {:unique=>true})
       -> 0.0231s
    -- add_index(:admins, :reset_password_token, {:unique=>true})
    rake aborted!
    An error has occurred, this and all later migrations canceled:

    PGError: ERROR:  column "reset_password_token" does not exist
    : CREATE UNIQUE INDEX "index_admins_on_reset_password_token" ON "admins" ("reset
    _password_token")

    (See full trace by running task with --trace)

我在本地计算机上的应用程序中更改了迁移文件。但是当我使用heroku rake db:migrate时,似乎没有任何改变。我已经运行了git push heroku master。 我可以在本地计算机上迁移数据库。我目前正在使用phpmyadmin的Mysql。

我是否必须更改我的数据库。我的应用程序是不是被推送到heroku?

以下是我的一些database.yml:

    production:
      adapter: mysql
      database: rails_p
      encoding: utf8
      pool: 5
      username: root
      password: 
      socket: C:/xampp/mysql/bin/mysqld.sock
      host: 127.0.0.1

我的迁移:

class DeviseCreateAdmins < ActiveRecord::Migration
  def self.up
    create_table(:admins) do |t|
      t.database_authenticatable :null => false
      t.rememberable
      t.timestamps
    end

    add_index :admins, :email,                :unique => true
    # add_index :admins, :confirmation_token,   :unique => true
    # add_index :admins, :unlock_token,         :unique => true
  end

  def self.down
    drop_table :admins
  end
end

2 个答案:

答案 0 :(得分:0)

可能是错误发生在不同的迁移上,因为您没有包含devise recoverable 列,并且您的脚本未引用列* reset_password_token *

是否要运行以下脚本?

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable   
      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

请记住,当你使用heroku时,你会推送你的git存储库,所以如果你有未提交的更改(正如你所提到的那样),heroku将不会看到它们。

答案 1 :(得分:0)

git commit -a -m "updated some files"

然后git push heroku master