Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RubyonRails和一个复制的MySQL实例_Mysql_Ruby On Rails_Mysql Proxy - Fatal编程技术网

RubyonRails和一个复制的MySQL实例

RubyonRails和一个复制的MySQL实例,mysql,ruby-on-rails,mysql-proxy,Mysql,Ruby On Rails,Mysql Proxy,[免责声明:我戴着我的devops帽子,它甚至不是我的全职帽子。我没有RoR帽子,我只是尽我所能。] 我有一个在多个数据中心运行的RoR应用程序。MySQL允许我将数据复制到所有DC,但只有一个MySQL实例是可写的。(是的,有一些技术可以复制回主机,但我不相信RoR会维护必要的合同来安全地完成这项工作。也许我错了。) 大多数情况下,RoR都是从MySQL中读取数据的,所以如果我能告诉RoR使用本地MySQL实例,速度会快得多,除非它需要编写一些东西 或者,也许我没有正确地看待这个问题,我可以告

[免责声明:我戴着我的devops帽子,它甚至不是我的全职帽子。我没有RoR帽子,我只是尽我所能。]

我有一个在多个数据中心运行的RoR应用程序。MySQL允许我将数据复制到所有DC,但只有一个MySQL实例是可写的。(是的,有一些技术可以复制回主机,但我不相信RoR会维护必要的合同来安全地完成这项工作。也许我错了。)

大多数情况下,RoR都是从MySQL中读取数据的,所以如果我能告诉RoR使用本地MySQL实例,速度会快得多,除非它需要编写一些东西


或者,也许我没有正确地看待这个问题,我可以告诉MySQL这就是我的意思。(事实上,也许正确的做法是设置一个MySQL代理实例,并告诉它进行读/写拆分。)

一个解决方案是为同一个类创建两个不同的连接,一个连接将连接到可写数据库,另一个连接到可读数据库

保留原始db connection类,然后创建另一个只读类,以便定义两个不同的类:

class Example < ActiveRecord::Base
end

class ReadExample < ActiveRecord::Base
  establish_connection configurations['read_example'][Rails.env]
end
类示例
无论您想在何处进行只读调用,请将“Example”替换为“ReadExample”

我还没有测试过这个,但我认为它应该可以工作。唯一的危险是将“Readable”类放在一个实际写入的调用上。

这看起来像是做了您需要的事情。