ruby-on-rails Mysql2 gem在本地(服务器)时间从远程数据库强制转换datetime对象

hgqdbh6s  于 2023-08-08  发布在  Ruby
关注(0)|答案(1)|浏览(89)

我已经看了一遍又一遍关于(否则)优秀的Mysql 2 gem的文档。
我有一个运行在UTC的服务器上的生产Rails应用程序。该应用的config.time_zone设置为“东部时间(美国和加拿大)”。
我们有一个内部的MS Access应用程序(谢天谢地,它使用了一个MySQL DB),上面提到的Rails应用程序可以连接到它来同步产品数据、生产计划等。由于应用程序的限制,这个MySQL服务器不能移动到云中,而且--不用说--我们不能将其时区处理更改为UTC --所有内容都是EST。
当我从Rails应用程序连接到本地数据库以检索数据时,Mysql 2(默认情况下)会将所有原生数据转换为易于理解的Ruby对象。然而,我让Rails应用程序正确解释日期的唯一方法是在Mysql 2查询命令期间发送:cast => false,然后在响应处理中,对结果运行Time.zone.parse(string)。这就需要原生的Ruby对象强制转换,这远不如gem中内置的强制转换函数有效。
我尝试传递文档中提到的database_timezone和application_timezone选项,但是:local符号没有使用应用程序的config.time_zone属性的预期效果。

thehost.query("SELECT NOW() AS n;", :symbolize_keys => true).each { |result| p result[:n] }

2015-05-19 16:28:41 +0000

thehost.query("SELECT NOW() AS n;", :symbolize_keys => true, :database_timezone => :local, :application_timezone => :local).each { |result| p result[:n] }

2015-05-19 16:30:11 +0000

thehost.query("SELECT NOW() AS n;", :symbolize_keys => true, :database_timezone => :utc, :application_timezone => :local).each { |result| p result[:n] }

2015-05-19 16:30:28 +0000

thehost.query("SELECT NOW() AS n;", :symbolize_keys => true, :database_timezone => :local, :application_timezone => :utc).each { |result| p result[:n] }

2015-05-19 16:30:57 UTC

thehost.query("SELECT NOW() AS n;", :symbolize_keys => true, :database_timezone => :utc, :application_timezone => :utc).each { |result| p result[:n] }

2015-05-19 16:31:19 UTC

字符串

olmpazwi

olmpazwi1#

晚了几年。
我阅读了Mysql 2 Gem的文档

uri = URI.parse(ENV['DATABASE_URL'])
    mysql = Mysql2::Client.new(
      host: uri.host,
      username: uri.user,
      password: uri.password,
      port: uri.port,
      database: uri.path[1..-1],
      encoding: 'utf8',
      database_timezone: :utc,   
      application_timezone: :utc,
    )

字符串

相关问题