我有两台机器......一台开发机器和一台生产机器。当我第一次将我的Rails应用程序带到生产服务器上时,我没有任何问题。我只需通过运行rake db导入schema.rb:schema:load RAILS_ENV = production。一切都好。为什么Rake会抛出这个Rails迁移错误?
因此,在我的开发机器上,我做了一些更改和另一次迁移,然后将新应用程序复制到生产计算机上。然后我尝试通过运行rake db来更新数据库:migrate RAILS_ENV = production。我收到以下错误: “数据库中已经有一个名为'schema_migrations'的对象。”
我在想我自己,雅没有开玩笑耙......你创造了它!我在耙子上跑过痕迹,好像耙子认为这是它第一次跑步。但是,通过分析我的开发计算机和生产计算机上的'schema_migrations'表,可以看到一个迁移有差异,即我想要迁移的迁移。
我也试着明确定义版本号,但这也不起作用。
关于如何让我的生产服务器保持最新的任何想法?
更新:
让我说开始,我不能只是“降”的数据库。这是一个已经有超过10万条记录的生产服务器。如果将来出现类似问题会发生什么?我每次发生数据库问题时都会丢掉表格?这次可能会起作用,但对于每个数据库问题来说,它似乎都不是一个实用的长期解决方案。我怀疑我现在遇到的问题对我来说是独一无二的。
听起来像'schema_info'表和'schema_migrations'表是相同的。在我的设置中,我只有'schema_migrations'。如前所述,生产服务器上的'schema_migrations'表与开发计算机之间的差异只是一个记录。也就是说,包含我想要迁移的更改版本号的记录。
从我读过的'Simply Rails 2'一书中,它指出,当第一次移动到生产服务器时,不应运行rake db:migrate,而应该运行rake:db:schema:load。
如果有关系,我使用的是Rails版本2.1。
是的,schema_migrations表是您的密钥,它可能不在那里或者没有填充或生产服务器上的东西 – 2008-10-25 04:36:17