我在执行数据库时遇到了一些问题:从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}}有这个设定。无论哪种方式,我都采用这种方式进行明确推送,后续拉动仍然存在同样的问题。