Capistrano deploy和schema.rb

时间:2011-02-22 12:08:22

标签: ruby-on-rails ruby-on-rails-3 capistrano schema.rb

我是Rails的新手,我正在尝试部署我的第一个项目。 我正在使用rails 3,ruby 1.8.7,Passanger,Mysql和Git

我遵循了很多教程来学习使用capistrano进行部署,并且有一个我无法弄清楚的问题。 在教程中,他们从不谈论schema.rb 如果此文件负责我已经完成的迁移以及部署应用程序时,capistrano将所有文件复制到“当前”文件夹(schema.rb to),它如何在生产服务器上执行正确的迁移。我应该告诉capistrano为“current”文件夹制作一个simlink到正确的schema.rb文件吗?如果是的话我该怎么做? TNKS。

1 个答案:

答案 0 :(得分:8)

schema.rb文件包含数据库定义。它不对任何迁移负责。

迁移包含在db/migrations文件夹中。当您部署新版本并要求Capistrano迁移当前数据库时,Capistrano将调用rake db:migrate。迁移任务不依赖于schema.rb。它连接到数据库,从schema表中读取已执行迁移的列表,并执行该表中不存在记录的db/migrations中的所有文件。

schema.rb文件仅在您调用rake db:schema:load或引导Rails时使用。在后一种情况下,Rails将使用模式来防止每次访问模型时检查数据库结构。

也就是说,schema.rb文件必须在SCM中进行版本控制,并且必须在部署期间包含它。你不需要做任何特别的事情。除非您忽略它,否则Capistrano会像您所有其他文件一样从SCM检出文件。