Ruby 2.2:PG :: CharacterNotInRepertoire:ERROR:用于编码的无效字节序列" UTF8"

时间:2014-12-29 04:15:47

标签: ruby-on-rails ruby postgresql

我正在升级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"

2 个答案:

答案 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预发布中修复