1

我有 2 个单独的 Rails 应用程序(应用程序 a、应用程序 b)。这两个应用程序都维护一个客户列表。我想每天运行一次 rake 任务,并让应用 b 从应用 a 中拉取选定的客户。

这是我试图解决这个问题的方法。如果我走错了路,请告诉我。

我正在使用 JBuilder 生成 JSON

我的问题是如何让应用 B 在应用 A 中设置一个 id,以便系统知道客户已经被转移过来。

我假设我必须做一个类似于我为获取客户列表所做的请求,但我在让它工作时遇到了问题。

应用程序 A

客户模型

scope :for_export, :conditions => {:verified => true, :new_system_id => nil ...}

客户控制器

skip_before_filter :verify_authenticity_token, :only => [:update]

#
def index
    @customers = Customer.for_export
end

def update
    @customer = Customer.find(params[:id])
    if @customer.update_attributes(params[:customer])
        render :text => 'success', :status => 200
    end
end

应用程序 B

耙任务

task :import_customers => :environment do
   c = Curl::Easy.new("http://domain.com/customers.json")
   c.http_auth_types = :basic
   c.username = 'username'
   c.password = 'password'
   c.perform
   a = JSON.parse(c.body_str)

   a.each do |customer|
       customer = Customer.create(customer)
           #put request back to server a to update field
       end


end

结束结束

我目前正在工作,我只是不确定这是否是正确的方法,以及如何发起一个 put 请求来调用客户控制器中的更新方法。

谢谢!

瑞安

4

1 回答 1

0

对不起,我没有回答你的问题,但我给你一个替代方案。您尝试创建的内容听起来很像 ETL 工作。您可能需要考虑让批处理作业定期将客户表的副本从应用程序 a 移动到应用程序 b,然后让另一个批处理作业将该表导入应用程序 b 的数据库。我知道,这有点笨拙,但它是一种非常流行且可靠的模式来解决您的问题。

此外,如果两个应用程序位于同一个数据中心,那么您可能需要创建应用程序 a 的客户数据的只读数据库视图,然后让应用程序 b 使用 SQL 调用读取该数据。与我上面列出的选项相比,这是一种集成这两个应用程序的更便宜、更简单的方法。

祝你好运!

于 2012-05-09T20:22:29.723 回答