[問題紀錄]Rubygem mysql 問題

由 andy 發表於 五月 31, 2011 / 2 則評論

環境
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
mysql2 (0.2.7)
Rails 3.0.7

問題
啥都還沒做光把資料庫預設為mysql 指令rails new webstie -d mysql
開完controller 馬上出現下面


Error

TypeError 
can't convert Fixnum into String

原因:因為你的Mysql 密碼是數字! (驚)

解決辦法


1. 修改mysql 密碼 (治標)
mysqladmin -h localhost -u root password

2. 更改Gem程式碼(治本) 
Git上討論的解法
https://github.com/krekoten/mysql2/commit/68795e295e64faee357a56947b5cf09a2de397c1
中文步驟
編輯 

lib/mysql2/client.rb (+增加該行程式碼 – 刪除)

Mac的話在~/.rvm/gems/ruby-1.9.2-p180/gems/ 底下
ssl_set(*opts.values_at(:sslkey, :sslcert, :sslca, :sslcapath, :sslciper))

user = opts[:username]
- pass = opts[:password]
+ pass = opts[:password] ? opts[:password].to_s : nil
host = opts[:host] || 'localhost'
port = opts[:port] || 3306

spec/mysql2/client_spec.rb  備註:+號不要放啊 第一行 那是程式 不用怕XD


}.should raise_error(Mysql2::Error)
end
end

+ it 'should convert password to string' do
+ lambda do
+ client = Mysql2::Client.new(:password => 12345)
+ end.should_not raise_error(TypeError, "can't convert Fixnum into String")
+ end

it "should accept connect flags and pass them to #connect" do
klient = Class.new(Mysql2::Client) do
database = opts[:database]

 

關於作者

喜愛閱讀心理學與程式,資訊技術相關書籍,電影偏愛血淋淋,需要動腦的懸疑解謎,災難科幻類型.平時運動:游泳,慢跑等...最愛的一句話: Divide and Conquer! 無法掌握現在,如何談及未來!目前職業是程式設計師.

評論

  1. andy 說: 2011/06/02

    哈哈是喔 小弟這週才開始摸不知道還有這招 感謝ihower大  

    又學了一招 

  2. ihower 說: 2011/06/02

    可以不用改code這麼麻煩吧,改 database.yml 加上引號即可。
    password: "123456"

發表評論至 andy

*