我有两台机器......一台开发机器和一台生产机器。当我第一次将我的 rails 应用程序带到生产服务器上时,我没有遇到任何问题。我只是通过运行 rake db:schema:load RAILS_ENV=production 来导入 schema.rb。一切都好。
所以,然后在我的开发机器上,我进行了一些更改和另一个迁移,然后将新应用程序复制到生产机器上。然后我尝试通过运行 rake db:migrate RAILS_ENV=production 来更新数据库。我收到以下错误:“数据库中已经有一个名为 'schema_migrations' 的对象。”
我在想自己,你不开玩笑,瑞克……你创造了它!我在 rake 上运行跟踪,似乎 rake 认为这是它第一次运行。但是,通过分析我的开发机器和生产机器上的“schema_migrations”表,您可以看到一个迁移存在差异,即我想要迁移的那个。
我也尝试过明确定义版本号,但这也不起作用。
关于如何使生产服务器保持最新的任何想法?
更新:
让我首先说我不能只是“删除”数据库。这是一个生产服务器,里面已经有超过 10 万条记录。如果以后出现类似的问题怎么办?我是不是每次发生数据库问题时都删除表?这次它可能会奏效,但它似乎不是每个数据库问题的实用长期解决方案。我怀疑我现在遇到的问题对我来说是独一无二的。
听起来“schema_info”表和“schema_migrations”表是一样的。在我的设置中,我只有“schema_migrations”。如前所述,生产服务器上的“schema_migrations”表和开发机器上的差异只是一条记录。即包含我要迁移的更改的版本号的记录。
从我读过的《Simply Rails 2》一书中,它指出当第一次迁移到生产服务器时,应该只运行 rake:db:schema:load,而不是运行 rake db:migrate。
如果重要的话,我使用的是 Rails 2.1 版。