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



我已经一遍又一遍地阅读(否则)优秀的Mysql2 gem的文档。

我有一个生产Rails应用程序托管在服务器上运行在UTC。应用程序的配置。time_zone设置为"东部时间(US &加拿大)。"

我们有一个内部的MS access -head应用程序(谢天谢地,它使用了MySQL数据库),上面提到的Rails应用程序连接到它来同步产品数据、生产计划等。由于应用程序的限制,这个MySQL服务器不能移动到云中,而且——不用说——我们不能将其时区处理更改为UTC——一切都在EST中。

当我从Rails应用程序连接到本地数据库检索数据时,Mysql2(默认情况下)将所有本地数据转换为可消化的Ruby对象。然而,我可以让Rails应用程序正确解释日期的唯一方法是在Mysql2查询命令期间发送:cast => false,然后在响应处理中运行Time.zone。对结果进行解析(字符串)。这就需要使用本地Ruby对象强制转换,其效率远远低于gem内置的强制转换函数。

我尝试传递文档中提到的database_timezone和application_timezone选项,但是:local符号没有使用应用程序配置的预期效果。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

晚了几年。

我阅读了关于Mysql2 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,
    )

相关内容

  • 没有找到相关文章

最新更新