Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 ActiveRecord在Heroku上加载二进制字段不正确,在OSX上加载不正确_Ruby On Rails_Postgresql_Activerecord_Encoding_Rails Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord在Heroku上加载二进制字段不正确,在OSX上加载不正确

Ruby on rails ActiveRecord在Heroku上加载二进制字段不正确,在OSX上加载不正确,ruby-on-rails,postgresql,activerecord,encoding,rails-activerecord,Ruby On Rails,Postgresql,Activerecord,Encoding,Rails Activerecord,我有一个rails 3.1应用程序,它将图像存储在postgresql数据库的二进制字段中(我知道在数据库中存储图像可能会出现问题,但现在必须这样做)。在OSX上的开发模式和规格下,一切都可以在本地正常工作,但在部署到Heroku的应用程序中,所有图像都会被破坏。通过将本地计算机指向heroku实例使用的同一个数据库,并正确显示所有图像,我已经验证了数据库中的数据是否正确 因此,问题似乎在于ActiveRecord(在Heroku上运行)从数据库加载数据。我也猜这是一个编码问题。在本地运行rai

我有一个rails 3.1应用程序,它将图像存储在postgresql数据库的二进制字段中(我知道在数据库中存储图像可能会出现问题,但现在必须这样做)。在OSX上的开发模式和规格下,一切都可以在本地正常工作,但在部署到Heroku的应用程序中,所有图像都会被破坏。通过将本地计算机指向heroku实例使用的同一个数据库,并正确显示所有图像,我已经验证了数据库中的数据是否正确

因此,问题似乎在于ActiveRecord(在Heroku上运行)从数据库加载数据。我也猜这是一个编码问题。在本地运行rails控制台可以验证这些字段的字节大小是否正确,但是在Heroku上运行rails控制台会显示不正确的字节大小。事实上,通过Heroku上的ActiveRecord加载一个N字节的文件会导致所有文件的字节大小为2N+1


非常感谢您的帮助。

2n+1闻起来像是从
bytea
获得十六进制输出,而不是旧的转义格式。我猜您使用的是专用数据库,这意味着PostgreSQL 9.0具有:

从PostgeSQL 8.x迁移到PostgreSQL 9.x时,可能会遇到二进制字符串兼容性问题。版本9中的默认表示形式为十六进制,但版本8将其设置为转义。您可以通过手动设置bytea_输出使PostgreSQL 9使用转义

如果我是对的,那么您可以使用上述链接中的说明或使用此摘要版本:

  • 在命令行中键入“heroku config vars”以获取系统详细信息
  • 数据库中提取PostgreSQL用户名postgres://username:password@主机/数据库名称
  • 使用heroku pg:psql获取PostgreSQL控制台
  • 执行
    将tea_输出设置的角色用户名更改为“escape”psql
    控制台的code>,其中,
    username
    当然是来自(1)的用户名
  • 退出
    psql
    执行
    heroku重新启动
    以重新启动应用程序

  • 然后再试一次,希望得到正确的字节。

    列类型是什么?:rails中的二进制,postgres中的bytea。谢谢!我实际上读过那个文档,但认为这不是我的问题,因为将本地dev-rails服务器指向同一个数据库(并使用同一个数据库用户)会产生工作图像。我想我还是没有100%的尝试,但它确实做到了。天才回答,谢谢!这解决了我非常类似的问题:仅供参考,Heroku Postgres已将此设置为所有新入门级数据库的默认设置(
    将bytea\u输出设置为“escape”
    )。您可以通过运行
    select setting from pg_settings,其中name='bytea_output'@FrankGroeneveld是:)