加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在相同的Rails应用程序中序列化和通信Acti

发布时间:2020-12-17 02:50:44 所属栏目:百科 来源:网络整理
导读:主要的想法是我有一个Rails应用程序的几个工作者实例,然后是一个主聚合 我想用以下伪伪代码做这样的事情 posts = Post.all.to_json( :include = { :comments = { :include = :blah } })# send data to another,identical,exactly the same Rails app# ...# F
主要的想法是我有一个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.
>需要保留层次结构(例如“Hey other Rails应用程序,我有类型,每种类型都有艺术家,每个艺术家都有一个专辑,每个专辑都有歌曲”等)

解决方法

您可以使用以下几个选项来实现此功能:

活跃资源

正如其他人已经回答的那样,你可以使用ActiveResource.在阅读你的评论后,这似乎是一个你想要避开的解决方案,因为多个请求方面

接收控制器

您可以在第二个rails应用程序中安装一个控制器,用于接收数据并从中创建记录.

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

您可以将此控制器命名为“API”命名空间,如果正确实施,这是一个相当干净的解决方案.

共享数据库

您可以跨两个应用程序共享一个数据库.这意味着您不需要将数据从一个模型发送到另一个模型,它已经存在.这是您作为开发人员的最少工作量,但根据您拥有的系统架构,可能无法实现.

每个应用程序中有两个数据

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

#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

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

结论

由于您不想使用ActiveResource,我建议您只在应用程序之间共享数据库.如果这不可能,那么尝试使用两个模型,每个模型进入不同的数据库.最后,接收控制器是一个有效的,虽然较慢的选项(因为它需要在数据库请求之上执行HTTP请求)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读