环境:
Rails 2.3.2
DBI 0.4.1
DBD/ODBC 0.2.4
场景:
我有一个 Rails 应用程序,它通过常规批处理作业将大部分数据从外部 SQL DB 导入 Rails SQL DB。这些批处理作业首先加载 Rails 环境,然后通过 RubyDBI 进行直接数据库连接。连接后,我运行 select 语句来提取数据、处理数据并构建 ActiveRecord 对象。
我刚刚遇到了一个奇怪的问题,即开发中的行为与生产中的行为不同。似乎当 config.cache_classes 为真时,DBI 停止正确地将返回的 SQL DATETIME 类型强制转换为 Ruby 日期时间。这是一个提取的代码示例:
## config.cache_classes = true
query = "select TOP 1 [EPOLeafNode].[Lastupdate] AS last_update from [EPOLeafNode]"
conn = DBI.connect('dbi:ODBC:DRIVER=FreeTDS;TDS_Version=8.0;SERVER=sql;DATABASE=EOP;uid=uid;pwd=pwd;')
conn.select_one(query)
=> ["2008-11-05 20:53:26.000"]
## config.cache_classes = false
query = "select TOP 1 [EPOLeafNode].[Lastupdate] AS last_update from [EPOLeafNode]"
conn = DBI.connect('dbi:ODBC:DRIVER=FreeTDS;TDS_Version=8.0;SERVER=sql;DATABASE=EOP;uid=uid;pwd=pwd;')
conn.select_one(query)
=> [[Wed, 05 Nov 2008 20:53:26 +0000]]
这是一个错误,还是我不理解的预期行为?我可以覆盖它,最好总是强制数据吗?如果没有,有什么想法可以最好地处理数据,以便在开发和生产中产生相同的结果?