Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4 ActiveRecord Sql Server-无法将二进制文件保存到图像列中_Ruby On Rails 4_Rails Activerecord_Freetds_Tiny Tds - Fatal编程技术网

Ruby on rails 4 Rails 4 ActiveRecord Sql Server-无法将二进制文件保存到图像列中

Ruby on rails 4 Rails 4 ActiveRecord Sql Server-无法将二进制文件保存到图像列中,ruby-on-rails-4,rails-activerecord,freetds,tiny-tds,Ruby On Rails 4,Rails Activerecord,Freetds,Tiny Tds,我们正在努力将我们的应用程序升级到更新版本的Ruby&Rails。我们的应用程序与一个遗留数据库(SQL Server 2008 R2)集成,该数据库有一个带有图像数据类型列的表(我们无法将此列更改为varbinary(max))。以前我们可以将二进制文件保存到image列中。但是现在我们得到了转换错误 我们正在努力升级到以下(除其他外): 轨道4.2.1 ActiveRecord_SQLServer_适配器(4.2.4) tiny_tds(0.6.3.rc1) 自由TDS(v0.91.112

我们正在努力将我们的应用程序升级到更新版本的Ruby&Rails。我们的应用程序与一个遗留数据库(SQL Server 2008 R2)集成,该数据库有一个带有图像数据类型列的表(我们无法将此列更改为varbinary(max))。以前我们可以将二进制文件保存到image列中。但是现在我们得到了转换错误

我们正在努力升级到以下(除其他外):

  • 轨道4.2.1
  • ActiveRecord_SQLServer_适配器(4.2.4)
  • tiny_tds(0.6.3.rc1)
  • 自由TDS(v0.91.112)
当我们现在尝试保存到图像列时,会出现类似以下错误:

TinyTds::错误:字符串后未闭合的引号

通过研究tiny_tds&activerecord_sqlserver_适配器中的各种问题,我们决定创建第二个与第一个表匹配的表,但将数据类型从image更改为varbinary(max)。我们可以将二进制文件保存到列中

引起挑战的代码是在后台工作中,我们从s3抓取图像,在本地存储它们,然后将图像推送到数据库中。同样,我们不控制遗留数据库,因此无法更改数据类型(或者首先面临为什么要将图像存储在数据库中的问题)

。。。
@d=新文件
...
打开(“#{Rails.root}/cache/pictures/image.png”,“wb”)do|文件|
文件根据网站上的反馈,我们回滚到4.1.11,现在可以保存到图像列中

我们还必须添加此选项以克服触发器的问题。

根据网站上的反馈,我们回滚到4.1.11,现在可以保存到图像列中

我们还必须添加此选项以克服触发器的问题

...
@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!