我正在rails上开发一个应用程序(rails v4)。在rails应用程序重启时执行脚本的脚本
我对模型做了一些更改,一旦生产中的应用程序更新并重新启动,数据需要由脚本修改。
当代码更新时,有没有一种简洁的方式可以对轨道服务器执行脚本(仅一次)。
这就像您在Gemfile中添加一个gem并且服务器在您进行软件包更新之前不会启动。
我正在rails上开发一个应用程序(rails v4)。在rails应用程序重启时执行脚本的脚本
我对模型做了一些更改,一旦生产中的应用程序更新并重新启动,数据需要由脚本修改。
当代码更新时,有没有一种简洁的方式可以对轨道服务器执行脚本(仅一次)。
这就像您在Gemfile中添加一个gem并且服务器在您进行软件包更新之前不会启动。
虽然迭戈的答案是正确的,我想指出的另一种方法。基本上有两种更新数据的方法。第一个是Diego的回答中所描述的迁移。另一个是Rake任务。他们每个人都有几个论点。
迁移的主要优点是Rake任务不依赖于代码。因此,当新开发人员加入项目时,您不需要压缩迁移或从模式文件构建数据库。
你应该看看Elle Meredith写的关于data migrations in Rails的文章,然后为你选择最好的方法。
因为我使用mongomapper,阅读完文章后,rake任务是解决我的问题的更好方法。迁移是在您更改模式时使用的很酷的工具,但不应该用于数据。 – Kerby82
听起来就像你可以将这个一次性脚本放在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
这个工作是否也在mongomapper中?如果您使用活动记录,我知道此解决方案的工作。在我的情况下,我需要分配两个模型之间的关系,我想确保这是完成的。 – Kerby82
对于mongo,你可以使用这个gem:https://github.com/cheald/mongrations – DiegoSalazar
这是迁移的目的。您既可以更改表格的结构,也可以更改表格中的数据。 –
我正在使用mongomapper。 – Kerby82