问题标签 [db-charmer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
596 浏览

ruby-on-rails - 如何通过 ruby​​ on rails 为每个租户使用一个数据库

我遇到了一个不常见的问题,我的客户有 3 家商店,并且想要一个 Web 应用程序来分别管理每个商店。这将是一种常见的多租户方法,但还有一个额外的要求:客户端不想依赖互联网连接。因此我可以想到2个解决方案,每个商店都必须有一个服务器,1个数据库实例和1个应用程序实例运行,如果互联网连接失败,客户端可以使用应用程序本地实例。

  • 异步数据库复制——每个存储本地数据库都是在线服务器数据库的副本。

  • 根据所选存储,使 rails 连接到不同的数据库。在这种情况下,应用程序在线实例将仅连接到 3 个本地数据库(每个数据库位于一个商店)。我看到了Guy 的演讲,并阅读了有关 magic_multi_connections (magicmodels.rubyforge.org/magic_multi_connections) 的内容,但它似乎已经过时了。DbCharmer似乎是一个可能的解决方案,但我不确定它是否会这样做。

    其他相关帖子:

    • railsforum.com/viewtopic.php?id=48435
    • stackoverflow.com/questions/1825844/multiple-databases-in-rails

我想知道这种情况下最好的架构。你会怎么做 ?

0 投票
1 回答
90 浏览

ruby-on-rails-3 - railscollective_idea/delayed_job gem 出现奇怪的乱序行为

[我在github上发布的交叉发布问题以扩大受众范围]

delay在事务中使用该方法时,我们看到了一种奇怪的行为。它可以很容易地在带有User模型和以下代码的 rails 控制台中复制。

有谁知道delayed_job 是否在内部做了一些改变数据库操作顺序的事情,如下所示?

重现步骤

预期行为

当它运行时,我们期望插入到delayed_jobs表中的操作按照所示的顺序发生,并且在我们指定的事务中。我们在 rails 控制台日志中看到的内容证实了这一点,如下所示。

观察到的(不正确的)行为

但是,mysql二进制日志显示了一些不同的内容,如下所示。请注意在其他操作之前INSERT进入delayed_jobs表是如何发生的,以及它是如何放置在自己的事务中的。

额外细节

我们还测试了没有外部事务的场景(如下所示),并且看到了相同的行为。意思是,INSERTindelayed_jobs发生在其他代码之前并且无序。

此外,我们是否在上述代码中的各种 AR 操作中使用save或都没有关系。save!这个问题无论如何都会发生。

版本信息

MySQL版本

导轨和宝石