在Rails中从一个应用程序到另一个应用程序调用控制器操作

时间:2019-07-10 11:49:33

标签: ruby-on-rails

我有两个相互交互的应用程序。我需要在第一个创建的第二个应用程序中创建模型的数据库实例。以下代码仅在创建User实例并保存后在第二个应用程序中调用该方法时有效。

app1_service.rb

def send_user_data
  json_data = {}
  user = User.last
  json_data[:app1_user_id] = user.id
  json_data[:user_name] = user.name
  render json_data
end 

app2_service.rb

def create_user
  response = App2Service.post( '/services/app1_service/send_user_data.json', query: { request: { authenticate: {auth_key: "#{APP_CONFIG[:auth_key]}"} } } )
    User.create(app1_user_id: response['app1_user_id'], user_name: response['user_name'])
end

我想做的是每在User中创建app2时在user数据库中创建app1实例。所以我尝试了这样:

users_controller.rb

def create
  if @user.save

    Services::App1Controller.send_user_data(user)
end

app1_service.rb

def self.send_user_data(user)
  #Here I am not able to figure out how to call the action from the controller in the other application
end

我应该进行哪些更改才能使其按要求工作?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应该调用app2 API才能在app2数据库上创建用户,例如:/services/app2_service/send_user_data.json。您还应该在app2上创建此API。

如果您确实需要同步这些数据,建议使用PostgreSQL多主复制来使两个数据库保持相同的数据或Kafka事件。