繁体   English   中英

Capistrano,Rails,PostgreSQL主从复制使得难以向从属添加其他表

[英]Capistrano, Rails, PostgreSQL Master-slaves replications making it hard to add additional tables to slaves

我已经构建了一个文档管理系统,该系统由一个内容管理Rails应用程序(用于编写和管理文档,用户和其他内容)和一个最终用户Rails应用程序(用于阅读,搜索等)组成。

内容管理应用程序本身就在服务器上,并且我有几个最终用户服务器以确保高可用性(一项要求)。 最终用户服务器充当内容管理服务器(PostgreSQL主/从复制)的从属服务器。

直到现在需要一个新功能为止,这种方法都有效。 最终用户应该能够生成包含用户选择的文档的pdf。 现在,这本身就没有问题-系统应该处理大量文档,因此我添加了Sidekiq工人来生成PDF。 但是棘手的部分到了:如何为最终用户应用添加状态,以便在pdf完成生成时通知用户。 在理想情况下,我将添加一个新模型,例如PDFPrintJob,它具有一个状态属性,可以通过控制器show动作对其进行检查。 但是问题在于,由于主/从情况,所有最终用户应用程序都位于只读数据库中。

那么我该如何解决呢? 有没有更好的方法来构造服务器,从而使我能够在可写的从属服务器上拥有其他表? 如果数据库服务器能够完成保持内容同步的繁重工作,我将很高兴。

我在JRuby 1.7.x和PostgreSQL 9.2上运行Rails4

谢谢一大堆

使用诸如sidekiq-status类的插件将作业状态存储在Sidekiq上。 至少,您可以使用JavaScript进行一些轮询来获取工作状态。 如果想花哨的话,可以使用Rails 4进行服务器端事件。

这是显示如何使用存储并检索每个Sidekiq作业的一部分的部分。

https://github.com/utgarda/sidekiq-status

检索状态

以后随时查询工作状态:

 job_id = MyJob.perform_async(*args) # :queued, :working, :complete or :failed , nil after expiry (30 minutes) status = Sidekiq::Status::status(job_id) Sidekiq::Status::queued? job_id Sidekiq::Status::working? job_id Sidekiq::Status::complete? job_id Sidekiq::Status::failed? job_id 

跟踪进度,保存和检索与作业相关的数据

 class MyJob include Sidekiq::Worker include Sidekiq::Status::Worker # Important! def perform(*args) # your code goes here # the common idiom to track progress of your task at 5, 100, "Almost done" # a way to associate data with your job store vino: 'veritas' # a way of retrieving said data # remember that retrieved data is always is String|nil vino = retrieve :vino end end job_id = MyJob.perform_async(*args) data = Sidekiq::Status::get_all job_id data # => {status: 'complete', update_time: 1360006573, vino: 'veritas'} Sidekiq::Status::get job_id, :vino #=> 'veritas' Sidekiq::Status::num job_id #=> 5 Sidekiq::Status::total job_id #=> 100 Sidekiq::Status::message job_id #=> "Almost done" Sidekiq::Status::pct_complete job_id #=> 5 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM