我们正在努力将我们的应用程序升级到更新版本的Ruby&轨。我们的应用程序与遗留数据库(SQL Server 2008 R2)集成,该数据库具有一列图像数据类型的表(我们无法将此列更改为varbinary(max))。以前我们能够将二进制文件保存到图像列中。但是现在我们遇到了转换错误。
我们正努力升级到以下(其中包括):
当我们现在尝试保存到图像列时,我们会得到类似于以下的错误:
TinyTds ::错误:字符串
后的未闭合引号研究tiny_tds和amp;中的各种问题activerecord_sqlserver_adapter,我们决定创建第二个匹配第一个表的表,但是将数据类型从image更改为varbinary(max)。我们可以将二进制文件保存到列中。
导致挑战的代码是在后台工作,我们从s3中获取图像,在本地存储它们,然后将图像推送到数据库中。同样,我们不控制遗留数据库,因此无法更改数据类型(或者首先要解决我们将数据存储在数据库中的问题。)
...
@d = Doc.new
...
open("#{Rails.root}/cache/pictures/image.png", "wb") do |file|
file << open(r.image.url).read
end
@d.document = File.binread("#{Rails.root}/cache/pictures/image.png")
@d.save!
鉴于升级已经破坏了我们的保存图像,我们正试图弄清楚如何最好地确定修复。我们显然可以回滚,直到找到可行的版本。但是我们希望找到一个解决方案。有人有什么想法吗?
更新:
我们添加了以下配置,因为我们在插入的表上有触发器:ActiveRecord::ConnectionAdapters::SQLServerAdapter.use_output_inserted = true
当我们删除此配置时,我们收到以下错误:
TinyTds::Error: The target table 'doc' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.
注意:我们无法对触发器进行任何修改。
答案 0 :(得分:0)
根据ActiveRecord_SQLServer_Adapter网站上的反馈,我们回滚到4.1.11,现在我们可以保存到图片列中。
我们还必须添加此snippet来克服触发器的问题。