gpt4 book ai didi

ruby-on-rails - 在同一台服务器上的 2 个 Rails 应用程序(最好是离线的)之间交换数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:17 25 4
gpt4 key购买 nike

我在同一台服务器上有 2 个 Ruby on Rails 4 应用程序(它们不会 - 也不应该 - 共享数据库):

deploy@Ubuntu-1404-trusty-64-minimal:~/applications$ ls
app1 app2

如何在 app1 和 app2 之间交换数据?

我当前的实现不稳定且不安全:

app1 请求 app2 更新用户名为 bobby 的用户的名字和姓氏:

# app1
HTTParty.get("https://app2.com/update_full_name?username=bobby&first_name=Bob&last_name=Dylan")

app2 收到 app1 的请求并处理:

# app2 app/controllers/some_controller.rb
def update_full_name
user = User.find_or_create_by(username: params[:username])
user.update_attributes(first_name: params[:first_name], last_name: params[:last_name])
end

我读过 ActiveResource has been removed from Rails 4 .无论如何,我从来没有真正理解过 ActiveResource,所以我不会进一步探索它,而是更喜欢不同的解决方案。

最佳答案

我遇到了同样的问题并探索了每个选项:ActiveResource(已弃用)、使用我自己开发的 API 包装器进行回调、使用 Redis 或 RabbitMQ 排队。对于我简单的头脑来说,没有什么是容易实现的。如果 App1 中的 Model1 将始终更新 App2 中的 Model2,那么我在 Rails 中找到的最佳解决方案是Promiscuous gem

运行一个发布/订阅系统使两个 ruby​​/rails 应用程序之间的数据保持同步变得非常简单。它适用于 ActiveRecord 和 Mongoid。文档更深入,但这里有一些我在尝试使用 Quick Start 进行设置时发现的陷阱。 github 页面上的指南。

  1. 确保你有一个 initializer file在连接到共享 RabbitMQ 实例的两个应用程序中。
  2. 如果在发布者端使用 ActiveRecord,您将需要创建一个新表(据我所知,订阅者不需要此表):

    create_table :_promiscuous do |t|
    t.string :batch
    t.timestamp :at, :default => :now
    end
  3. 您还需要为每个发布者和订阅者模型添加一列

    # in App1 - publisher
    add_column :publisher_model, :_v, :integer, limit: 8, default: 1

    # in App2 - subscriber
    add_column :subscriber_model, :_v, :integer, limit: 8
  4. 您可以设置发布模型的名称。例如,如果我在 App1 中有一个命名空间类 Admin::User,我可以发布属性 :as => 'AdminUser' 而 App2 有模型 AdminUser 它将正确收听。

  5. 如果您按照 github 页面上的说明进行操作,包括您的 mixin 并设置可发布/可订阅属性,您将不可避免地希望在生产环境中运行它,在这种情况下,您的订阅者将需要 run a worker .我使用了这个 Resque deploy script 的相当无耻的盗版,我的 Promiscuous 版本可以是 found here它似乎有效。

我正在寻找越来越多的方法来使用此设置。在共享和管理我的数据方面给我更多的灵 active 。祝你好运。

关于ruby-on-rails - 在同一台服务器上的 2 个 Rails 应用程序(最好是离线的)之间交换数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com