当我尝试运行heroku运行rake db:migrate时出现Postgres错误

时间:2013-04-02 03:18:53

标签: ruby-on-rails postgresql

我的sqlite3数据库在开发中运行良好,但是当我尝试将其迁移到生产时,我收到以下错误:

PG ::错误:错误:关系“电影”不存在 :ALTER TABLE“movies”ADD COLUMN“production_company”字符各不相同(255)/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `async_exec'

我知道有几个人发布了这个,但我尝试过的任何东西似乎都没有用。有谁知道我怎么解决这个问题?

以下是迁移:

class AddProductionCompanyToMovies < ActiveRecord::Migration
  def change
    add_column :movies, :production_company, :string, :limit => nil
  end
end

如果这有帮助,这是我的schema.rb文件:

ActiveRecord::Schema.define(:version => 20130331014529) do

create_table "movies", :force => true do |t|
t.string   "title"
t.string   "actor_1"
t.string   "locations"
t.string   "release_year"
t.string   "string"
t.string   "actor_2"
t.string   "actor_3"
t.string   "writer"
t.string   "director"
t.datetime "created_at",         :null => false
t.datetime "updated_at",         :null => false
t.string   "production_company"
t.string   "distributor"
t.string   "fun_facts"
end

end

这是我创建电影表的迁移:

class Movies < ActiveRecord::Migration
  def up
  end

  def down
  end
end

2 个答案:

答案 0 :(得分:1)

这不是最好的方法,但快速解决方法是用这个替换迁移:

class AddProductionCompanyToMovies < ActiveRecord::Migration
  def change
    create_table :movies do |t|
      t.string :production_company

      t.timestamps
    end
  end
end

答案 1 :(得分:0)

您创建影片表的迁移不正确。你没有做任何事情的上下方法。因此,没有要将production_company列添加到的电影表。

你需要这样的东西;

class Movies < ActiveRecord::Migration
  def change
    create_table :movies do |t|
      t.string  :title
      t.string  :actor
      .
      .    #add your columns you want in your initial migration here
      .
  end
end

我不能说为什么在SQLite中开发工作有效,但在某些时候你成功创建了电影表,然后你可能会改变迁移。这很容易做到(我已经完成了!)。

很多人建议您在设置生产时不要运行迁移来设置数据库,而是使用rake db:schema:load(事实上,如果您阅读了{{1}顶部的注释{1}}文件专门描述了这一点。)

另一点是很多人建议在开发中使用与生产中相同的数据库,因为存在微妙的差异,可能导致生产中出现意外问题(这不是导致问题的原因)。如果你刚刚开始,那么现在不要担心;在你自己的机器上设置PostgreSQL只是一个令人头痛的问题;但随着你的进步,这是要记住的事情。