gpt4 book ai didi

ruby-on-rails - ActiveRecord 在 Heroku 上错误地加载二进制字段,在 OSX 上正常

转载 作者:行者123 更新时间:2023-11-29 11:18:47 25 4
gpt4 key购买 nike

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

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

非常感谢任何帮助。

最佳答案

2n+1 听起来像是从 bytea 获取十六进制输出而不是旧的转义格式。我猜你使用的是专用数据库,这意味着 PostgreSQL 9.0 有一个 different default encoding for bytea :

When migrating from PostgeSQL 8.x to PostgreSQL 9.x you can run into issues with binary string compatibility. The default representation is hex in version 9 but version 8 it is set to escaped. You can make PostgreSQL 9 use escaped by manually setting bytea_output.

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

  1. 在命令行中输入“heroku config vars”以获取您的系统详细信息。
  2. 从您的 DATABASE_URL 中提取 PostgreSQL 用户名,它类似于 postgres://username:password@host/database_name
  3. 使用 heroku pg:psql 获取 PostgreSQL 控制台。
  4. psql 控制台执行 ALTER ROLE username SET bytea_output TO 'escape';,当然,username 是来自(1).
  5. 退出 psql 执行 heroku restart 以重新启动您的应用程序。

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

关于ruby-on-rails - ActiveRecord 在 Heroku 上错误地加载二进制字段,在 OSX 上正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8539207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com