ruby-on-rails - 如何在相同的 Rails 应用程序之间序列化和通信 ActiveRecord 实例?

标签 ruby-on-rails ruby json serialization

主要思想是我有几个 Rails 应用程序的工作实例,然后是一个主聚合

我想用下面的伪伪代码做这样的事情

posts = Post.all.to_json( :include => { :comments => { :include => :blah } })
# send data to another, identical, exactly the same Rails app

# ...
# Fast forward to the separate but identical Rails app:
# ...

# remote_posts is the posts results from the first Rails app
posts = JSON.parse(remote_posts)  
posts.each do |post|
  p = Post.new
  p = post
  p.save
end

我正在回避 Active Resource,因为我有数千条记录要创建,这意味着每条记录都有数千个请求。除非有一种方法可以通过简单的 Active Resource 在一个请求中完成所有操作,否则我想避免使用它。

  • 格式无关紧要。一切方便。
  • 不需要发送 ID,因为其他应用只会在“聚合”系统中创建记录并分配新 ID。
  • 需要保留层次结构(例如,“嘿,其他 Rails 应用程序,我有流派,每个流派都有一个艺术家,每个艺术家都有一张专辑,每张专辑都有歌曲”等)

最佳答案

您可以实现多个选项来使其正常工作:

事件资源

正如其他人回答的那样,您可以使用 ActiveResource .阅读您的评论后,由于多请求方面,这似乎是您想要避开的解决方案

接收 Controller

您可以在第二个 Rails 应用程序中有一个 Controller 来接收数据并从中创建记录。

class RecordReceiver < ActiveRecord::Base
  def create
    params[:data][:posts].each do |p|
      Post.create(p)
    end
  end
end

您可以在“API”命名空间内命名此 Controller ,如果实现得当,这是一个相当干净的解决方案。

共享数据库

您可以在两个应用程序之间共享一个数据库。这意味着您不需要将数据从一个模型发送到另一个模型,它已经存在了。作为开发人员,这对您来说是最少的工作量,但可能无法实现,具体取决于您拥有的系统架构。

每个应用程序中的两个数据库

您可以在每个应用程序中实现多个数据库,如下所示:

#Add to database.yml
other_development:
  adapter: mysql
  database: otherdb_development
  username: root
  password:
  host: localhost

other_production:
  adapter: mysql
  database: otherdb_production
  username: root
  password:
  host: localhost

然后,像这样定义你的模型:

class Post < ActiveRecord::Base

end

class PostClone < ActiveRecord::Base
  establish_connection "other_#{RAILS_ENV}"
end

现在,您的Clone 模型将指向当前数据库,而PostClone 模型将指向另一个数据库。通过访问这两者,您可以在需要时使用基本模型方法复制数据。

结论

既然您不想使用 ActiveResource,我建议您只在应用程序之间共享数据库。如果这不可能,则尝试使用两个模型,每个模型都转到不同的数据库。最后,接收 Controller 是一个有效的选项,尽管速度较慢(因为它需要在数据库请求之上执行 HTTP 请求)

关于ruby-on-rails - 如何在相同的 Rails 应用程序之间序列化和通信 ActiveRecord 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303163/

相关文章:

python - 如何遍历 JSON 中的条目?

json - 有没有办法查看查询是否与Elasticsearch中的数组中的任何元素匹配?

ruby-on-rails - 很棒的嵌套集插件 - 如何在不同级别向树中添加新子项

ruby-on-rails - 测试失败 : association id should be mandatory

ruby - Ruby 中 `\w` 与 `[[:alpha:]]` 之间的 Unicode 行为差异

ruby-on-rails - 无法在 Rails 中显示可点击的图像

javascript - 尝试在 jsonp 请求完成之前读取 var

ruby-on-rails - 如何在自定义 SQL 中使用 ActiveRecord 查询缓存

ruby-on-rails - 未定义的方法 `name' 为 "actionmailer":String

ruby-on-rails - Rails Elasticsearch轮胎嵌套映射