Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails应用程序重启时的脚本执行_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails RubyonRails应用程序重启时的脚本执行

Ruby on rails RubyonRails应用程序重启时的脚本执行,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我正在用RubyonRails(RailsV4)开发一个应用程序 我对模型做了一些更改,一旦生产中的应用程序更新并重新启动,数据就需要通过脚本进行修改 有没有一种简洁的方法可以告诉rail服务器在代码更新时执行脚本(只执行一次) 这就像在gem文件中添加gem时,服务器在执行包更新之前不会启动。听起来您可以将此一次性脚本放入rails迁移中。在终端中运行此命令: rails generate migration NameOfMyDataMigration 将MyData Migration的名

我正在用RubyonRails(RailsV4)开发一个应用程序

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

有没有一种简洁的方法可以告诉rail服务器在代码更新时执行脚本(只执行一次)


这就像在gem文件中添加gem时,服务器在执行包更新之前不会启动。

听起来您可以将此一次性脚本放入rails迁移中。在终端中运行此命令:

rails generate migration NameOfMyDataMigration
将MyData Migration的名称替换为对您有意义的名称

这将在
db/migrate
中创建一个新的迁移脚本,该脚本如下所示:

class NameOfMyDataMigration < ActiveRecord::Migration
  def change
    # your data modification logic
  end
end
该迁移将只运行一次


在这里了解有关Rails迁移的更多信息:

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

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


你应该看看Elle Meredith写的关于迁移的帖子,然后选择最适合你的方法。

这就是迁移的目的。您既可以更改表的结构,也可以更改表中的数据。我正在使用mongomapper。这在mongomapper中也适用吗?我知道如果您使用active record,此解决方案会起作用。在我的例子中,我需要在两个模型之间分配一个关系,我希望确保这一点。因为我使用mongomapper,并且在阅读了本文之后,rake任务是解决我的问题的更好的方法。迁移是一种很酷的工具,仅在您更改模式时使用,但不应用于数据。
rake db:migrate