Окружающая среда:
Рельсы 2.3.2
DBI 0.4.1
DBD / ODBC 0.2.4
Сценарий:
У меня есть приложение Rails, которое импортирует большую часть своих данных из внешних баз данных SQL в базу данных Rails SQL через обычные пакетные задания. Эти пакетные задания начинаются с загрузки среды Rails, а затем переходят к прямым соединениям с базой данных через RubyDBI. После подключения я запускаю операторы select, чтобы извлечь данные, помассировать их и построить объекты ActiveRecord.
Я только что натолкнулся на странную проблему, когда поведение отличается в разработке и производстве. Кажется, что когда config.cache_classes имеет значение true, DBI перестает правильно принудительно возвращать возвращаемый тип SQL DATETIME в Ruby datetime. Вот пример извлеченного кода:
## 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]]
Это ошибка или ожидаемое поведение, которое я не понимаю? Могу ли я переопределить его, желательно всегда приводить данные? Если нет, то есть какие-нибудь мысли о том, как лучше всего массировать данные, чтобы они давали одинаковый результат при разработке и производстве?