Ruby on rails 在2个Rails应用程序之间通信

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

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

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

我正在使用JBuilder生成JSON

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

我假设我必须做一个put请求,类似于我为获得客户列表所做的操作,但我在如何使其正常工作方面遇到了问题

应用程序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请求以调用customer controller中的update方法

谢谢


Ryan

很抱歉,我没有回答你的问题,但我给你一个选择。您试图创建的内容听起来很像ETL作业。您可能想考虑批作业将Appa A的客户表的副本周期性地移到App B,然后再将另一批作业导入到App B的数据库中。我知道,这有点笨重,但这是一个非常流行和可靠的模式来解决你的问题

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


祝你好运

我忘了提。无论您做什么,都不要给两个应用程序对同一个数据库表的编辑访问权限。这是其中最基本和最常被滥用的反模式之一。如果你这样做了,你会后悔的。谢谢你的建议,汤姆。从我的角度来看,这与在我的应用程序上有一个API,而另一个API通过它与应用程序通信没有什么不同。我可以看到反模式,但是如果一个应用程序仅仅通过API进行通信,那么它们实际上都没有SQL访问权限,我可以通过使用API来控制这种情况。