我的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
答案 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只是一个令人头痛的问题;但随着你的进步,这是要记住的事情。