Ruby on rails 在2个Rails应用程序之间通信
我有两个独立的rails应用程序app a和app b。这两个应用程序都维护一个客户列表。我想每天运行一次rake任务,让应用程序b从应用程序a中选择客户 这就是我试图解决这个问题的方法。如果我走错了路,请告诉我 我正在使用JBuilder生成JSON 我的问题是如何让应用程序B在应用程序A中设置一个id,以便系统知道客户已被转移 我假设我必须做一个put请求,类似于我为获得客户列表所做的操作,但我在如何使其正常工作方面遇到了问题 应用程序A 客户模型Ruby on rails 在2个Rails应用程序之间通信,ruby-on-rails,json,Ruby On Rails,Json,我有两个独立的rails应用程序app a和app b。这两个应用程序都维护一个客户列表。我想每天运行一次rake任务,让应用程序b从应用程序a中选择客户 这就是我试图解决这个问题的方法。如果我走错了路,请告诉我 我正在使用JBuilder生成JSON 我的问题是如何让应用程序B在应用程序A中设置一个id,以便系统知道客户已被转移 我假设我必须做一个put请求,类似于我为获得客户列表所做的操作,但我在如何使其正常工作方面遇到了问题 应用程序A 客户模型 scope :for_export, :c
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请求以调用customer controller中的update方法
谢谢
Ryan很抱歉,我没有回答你的问题,但我给你一个选择。您试图创建的内容听起来很像ETL作业。您可能想考虑批作业将Appa A的客户表的副本周期性地移到App B,然后再将另一批作业导入到App B的数据库中。我知道,这有点笨重,但这是一个非常流行和可靠的模式来解决你的问题 此外,如果两个应用程序位于同一数据中心,则您可能希望创建应用程序a的客户数据的只读数据库视图,然后让应用程序b使用SQL调用读取该数据。与我上面列出的选项相比,这是一种更便宜、更容易集成这两个应用程序的方法
祝你好运 我忘了提。无论您做什么,都不要给两个应用程序对同一个数据库表的编辑访问权限。这是其中最基本和最常被滥用的反模式之一。如果你这样做了,你会后悔的。谢谢你的建议,汤姆。从我的角度来看,这与在我的应用程序上有一个API,而另一个API通过它与应用程序通信没有什么不同。我可以看到反模式,但是如果一个应用程序仅仅通过API进行通信,那么它们实际上都没有SQL访问权限,我可以通过使用API来控制这种情况。