我在執行數據庫時遇到了一些問題:從heroku拉回我的本地開發環境。來自heroku的數據庫拔取失敗,出現Encoding :: CompatibilityError
我的設置是通過Mac OS X Snow Leopard通過RVM從MacPorts安裝在本地Rails 3/Ruby 1.9.2環境中的MySQL(5.1.50),並且我已成功執行heroku db:push
到生產站點Heroku很多次。但是,二次開發機相同的設置,當我嘗試拉Heroku的DB回通過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'
以下是相關的寶石:
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。
在我的主生產機器上發生同樣的錯誤順便說一句(我一直在做成功的數據庫:推到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文檔會在您推送時向您的數據庫網址提及appending '?encoding=utf',但我認爲我的默認heroku db:push
將數據發送給Heroku,首先使用database.yml
,該數字已經包含該設置。無論哪種方式,我這樣做了一個明確的推動,並且隨後的拉動仍然有同樣的問題。
呵呵。那有竅門,但爲什麼? 1.9中可能出現了一些新的默認值,這與輕拍寶石假設相沖突。感謝您及時的回覆。 – 2010-10-02 23:28:43
是的,這也是我的猜測。 – s84 2010-10-03 02:34:19