2016-09-19 181 views
2

我正在rails上开发一个应用程序(rails v4)。在rails应用程序重启时执行脚本的脚本

我对模型做了一些更改,一旦生产中的应用程序更新并重新启动,数据需要由脚本修改。

当代码更新时,有没有一种简洁的方式可以对轨道服务器执行脚本(仅一次)。

这就像您在Gemfile中添加一个gem并且服务器在您进行软件包更新之前不会启动。

+0

这是迁移的目的。您既可以更改表格的结构,也可以更改表格中的数据。 –

+0

我正在使用mongomapper。 – Kerby82

回答

1

虽然迭戈的答案是正确的,我想指出的另一种方法。基本上有两种更新数据的方法。第一个是Diego的回答中所描述的迁移。另一个是Rake任务。他们每个人都有几个论点。

迁移的主要优点是Rake任务不依赖于代码。因此,当新开发人员加入项目时,您不需要压缩迁移或从模式文件构建数据库。

你应该看看Elle Meredith写的关于data migrations in Rails的文章,然后为你选择最好的方法。

+1

因为我使用mongomapper,阅读完文章后,rake任务是解决我的问题的更好方法。迁移是在您更改模式时使用的很酷的工具,但不应该用于数据。 – Kerby82

2

听起来就像你可以将这个一次性脚本放在rails迁移中。在终端运行此命令:

rails generate migration NameOfMyDataMigration 

替换NameOfMyDataMigration与对你有意义的名称

这将在db/migrate创建一个新的迁移脚本,将是这个样子:

class NameOfMyDataMigration < ActiveRecord::Migration 
    def change 
    # your data modification logic 
    end 
end 

当您将其部署到生产环境时,您可以执行该操作:

rake db:migrate 

该迁移只能运行一次。

了解更多关于Rails迁移这里:http://guides.rubyonrails.org/v4.2/active_record_migrations.html

+0

这个工作是否也在mongomapper中?如果您使用活动记录,我知道此解决方案的工作。在我的情况下,我需要分配两个模型之间的关系,我想确保这是完成的。 – Kerby82

+0

对于mongo,你可以使用这个gem:https://github.com/cheald/mongrations – DiegoSalazar