【问题标题】:Rake task copy between databasesrake 数据库之间的任务副本
【发布时间】:2015-01-23 16:57:09
【问题描述】:

我有一个带有 Mongoid 数据库的 Rails 4 应用程序,我想引入一个沙盒环境来进行测试。有一些数据(两个模型),我想从生产数据库复制到沙箱。

我会使用 rake 任务来执行此操作,该任务由 cronjob 调用。但是,在这个 rake 任务中,我不确定如何建立到数据库的两个连接,并为不同的数据库使用相同的模型。

我也想在 mongodb 层做这件事(就像他们在How to copy a collection from one database to another in MongoDB 做的那样),但是一个模型由数据组成,应该只将部分复制到沙盒数据库中。因此,我认为我必须在 Rails 环境中进行。

在这个 rake 任务中,我可以将我所有的文章,但我不知道如何将它们“推送”到沙盒数据库中:

namespace :sandbox do
  desc "Syncs production -> sandbox data"
    task(:sync => :environment) do |t, args|
      Article.all.each do |article|
        if my_model1.state == :active
          # here it should sync article to the sandbox models

          # and then, it should also sync all the comments to the sandbox models
          article.comments
        end
      end
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby mongodb rake rake-task


    【解决方案1】:

    我终于自己找到了解决方案。关键是您可以在 mongoid.yml 中定义的 mongoid 会话。

    如果您想将生产数据复制到沙箱,您可以在沙箱环境中定义第二个会话(您在沙箱环境中启动任务,它使您可以访问生产数据库):

    sandbox:
      sessions:
        default:
          database: your_sandbox_db
          hosts:
            - localhost:27017
        production_sync:
          database: your_production_db
          hosts:
            - localhost:27017
    

    您可以通过为要同步的模型定义一个单独的类来访问production_sync 会话,如下所示:

    class ArticleProduction
      include Mongoid::Document
      include Mongoid::Attributes::Dynamic
      store_in collection: "articles", session: "production_sync"
    end
    

    现在您可以使用此类访问生产数据库。如果要将所有数据从生产复制到沙箱,请这样做:

    production_articles = ArticleProduction.map(&:attributes)
    production_articles.each do |attributes|
      Article.create(attributes)
    end
    

    我为自己定义了一个 rake 任务,每天由 cronjob 调用,并将数据从生产环境同步到沙盒。

    还有一个问题:如果您想确保不更改任何数据,某种只读模式会很有用(请参阅此处Make mongoid session read only)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2016-01-05
      • 2013-03-10
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多