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

我在执行db时遇到了一些问题:从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数据库heroku db:pull ,我在下载表和索引信息一段时间后得到以下错误:

 /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' 

这是相关的gem:

 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) 

这里有完整的错误和gem列表。

同样的错误发生在我的主要生产机器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文档确实提到在执行推送时将’?encoding = utf’附加到您的数据库URL,但我假设我的默认heroku db:push将数据发送到Heroku,首先使用了database.yml ,已经有了该集。 无论哪种方式,我都采用这种方式进行显式推送,后续拉动仍然存在同样的问题。

当我遇到错误时使用水龙头推拉的时候我将ruby版本切换到1.8.7,所以你可能想尝试一下。

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