我正在升级Rails 4.1应用程序以使用Ruby 2.2。在升级期间,结果发现该应用程序使用旧版本的pg gem(0.12)并且gem未使用Ruby 2.2进行安装。所以我尝试使用更新版本的pg gem(0.17.1)。现在,有时在系统中创建新用户时会出现以下错误:
PG :: CharacterNotInRepertoire:ERROR:编码的无效字节序列" UTF8"
Ruby 2.2和Postgres有任何已知问题吗?
看起来应用程序配置为使用unicode:config.encoding = "utf-8"
在application.rb中设置,encoding: unicode
在database.yml中
SQL语句:
INSERT INTO "users" (
"confirmation_sent_at",
"confirmation_token",
"created_at",
"email",
"encrypted_password",
"first_name",
"last_name",
"updated_at")
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
RETURNING "id"
答案 0 :(得分:5)
使用Postgres,Ruby 2.2.0中的某些错误肯定存在于UTF-8编码中。我将以前没有错误的Rails 4.1.5应用程序从Ruby 2.1.5升级到Ruby 2.2.0并开始在开发和用户输入电子邮件字段中获取这些错误“PG :: CharacterNotInRepertoire:ERROR:用于编码UTF8的无效字节序列”在Heroku的临时环境中。降级到Ruby 2.1.5而没有其他更改完全解决了这个问题。
更新
在这次更新中大打折扣,但错误不在于Ruby,而在于pg gem:https://github.com/ged/ruby-pg/pull/5
答案 1 :(得分:5)
看起来这是“pg”gem的一个已知问题:https://bitbucket.org/ged/ruby-pg/issue/197/ruby-220-byte-encoding-issue
应该在0.18预发布中修复