Tho*_*hom 5 timezone datetime ruby-on-rails mysql2
我一遍又一遍地阅读(否则)优秀的 Mysql2 gem 的文档。
我在以 UTC 运行的服务器上托管了一个生产 Rails 应用程序。应用程序的 config.time_zone 设置为“东部时间(美国和加拿大)”。
我们有一个内部 MS Access 为头的应用程序(幸运的是,它使用了 MySQL 数据库),上述 Rails 应用程序连接到该应用程序以同步产品数据、生产计划等。由于应用程序的限制,该 MySQL 服务器无法移入云中,而且——不用说——我们不能将其时区处理更改为 UTC——一切都在 EST 中。
当我从 Rails 应用程序连接到本地数据库以检索数据时,Mysql2(默认情况下)将所有本机数据转换为可消化的 Ruby 对象。但是,我可以让 Rails 应用程序正确解释日期的唯一方法是在 Mysql2 查询命令期间发送 :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
Run Code Online (Sandbox Code Playgroud)
晚了几年。
我阅读了 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,
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |