2

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

PG ::错误:错误:关系“电影”不存在:ALTER TABLE“电影”添加列“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
4

2 回答 2

1

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

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

      t.timestamps
    end
  end
end
于 2013-04-02T03:34:59.060 回答
0

您创建电影表的迁移不正确。你所拥有的 up 和 down 方法什么都不做。因此,没有要向其添加 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(事实上,如果您阅读db/schema.rb文件顶部的注释,它专门描述了这一点)。

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

于 2013-04-02T11:29:10.380 回答