在2个Rails应用程序之间进行通信

时间:2012-05-09 18:54:00

标签: ruby-on-rails json

我有2个独立的rails应用程序(app a,app b)。这两个应用程序都维护着一个客户列表。我想每天运行一次rake任务,让app b从app a。

中吸引精选客户

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

我正在使用JBuilder生成JSON

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

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

App 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

App B

rake任务

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请求以在客户控制器中调用update方法。

谢谢!

赖安

1 个答案:

答案 0 :(得分:0)

对不起,我没有回答你的问题,但我给你一个替代方案。你想要创造的东西听起来很像ETL的工作。您可能需要考虑让批处理作业定期将app表的副本从app a移动到app b,然后让另一个批处理作业将该表导入app b的数据库。我知道,它有点笨重,但它是一个非常流行和可靠的模式来解决你的问题。

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

祝你好运!