来自heroku的DB pull因Encoding :: CompatibilityError而失败

时间:2010-10-02 22:24:22

标签: mysql ruby-on-rails heroku

我在执行数据库时遇到了一些问题:从heroku回到我当地的开发环境。

我的设置是MySQL(5.1.50),通过RVM在Mac OS X Snow Leopard下的本地Rails 3 / Ruby 1.9.2环境中安装MacPorts,我已成功执行了heroku db:push Heroku的生产网站很多次。但是,在具有相同设置的辅助开发计算机上,当我尝试通过heroku db:pull拉回Heroku数据库时,我在下载表和索引信息一段时间后得到以下错误:

/Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/sequel-3.15.0/lib/sequel/adapters/shared/mysql.rb:399:in `join': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
    from /Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/sequel-3.15.0/lib/sequel/adapters/shared/mysql.rb:399:in `multi_insert_sql'

这是相关的宝石:

ruby-mysql (2.9.3)
sequel (3.15.0)
mysql2 (0.2.4)
taps (0.3.13)
heroku (1.10.6, 1.10.5, 1.10.0)

完整错误和宝石列表here

同样的错误发生在我的主要生产机器BTW上(我一直在做成功的数据库:推送到heroku表单)。

现在我明白这基本上是一个UTF8编码错误。 FWIW,我的database.yml显式引用了UTF8:

development:
  adapter: mysql2
  encoding: utf8
  database: rails_dev_dbname
  pool: 5
  username: rails
  socket: /tmp/mysql.sock

现在有趣的是,如果我创建一个几乎空白的DB,其中只有一个测试条目,我可以推/拉它。显然,在我的非UTF8数据集中。虽然目前还没有很多数据,但我完全有可能在其中复制了一些文字,其中包含一个引人注目的时髦引用或版权符号。

所以问题是,我该如何解决这个问题?当您执行推送时,Heroku文档会向您的数据库URL提及appending '?encoding=utf',但我认为我首先使用heroku db:push将数据发送到Heroku的默认database.yml已使用{{1}}有这个设定。无论哪种方式,我都采用这种方式进行明确推送,后续拉动仍然存在同样的问题。

1 个答案:

答案 0 :(得分:2)

当我遇到错误时,我使用水龙头推送和拉动时将我的红宝石版本切换为1.8.7,所以你可能想尝试一下。

如果您不使用此功能,请使用RVM来管理您的ruby版本