我有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方法。
谢谢!
赖安
答案 0 :(得分:0)
对不起,我没有回答你的问题,但我给你一个替代方案。你想要创造的东西听起来很像ETL的工作。您可能需要考虑让批处理作业定期将app表的副本从app a移动到app b,然后让另一个批处理作业将该表导入app b的数据库。我知道,它有点笨重,但它是一个非常流行和可靠的模式来解决你的问题。
此外,如果两个应用程序位于同一个数据中心,那么您可能需要创建应用程序客户数据的只读数据库视图,然后让应用程序b使用SQL调用读取该数据。与上面列出的选项相比,集成两个应用程序的方式稍微便宜一些。
祝你好运!