2013年8月30日金曜日

LoadError: no such file to load

gemは入っているのに、うまくrequireができない?!

$  gem list --local | grep mysql2
mysql2 (0.3.11)

$ irb
irb(main):001:0> require 'mysql2'
LoadError: no such file to load -- mysql2
        from (irb):1:in `require'
        from (irb):1

どうやら、先に require 'rubygems'  が必要らしい。
irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'mysql2'
=> true


で、なぜこんなことが必要なんだろう?
いつもはrvmで実行してるけど、
今回は他の人のサーバに設定をすることになり、
すでにモジュールも入った状態。
Ruby One-Click Installer からインストールされた場合の設定??

2013年8月28日水曜日

`autodetect': Could not find a JavaScript runtime

Rails3.2で、railsアプリを作って、コントローラをgenerateしようとしたらエラー。
以前もハマったけど、久々に新しいアプリを作るとハマるので、メモっておく。


エラーログ
/opt/bundle/ruby/2.0.0/gems/execjs-2.0.1/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
        from /opt/bundle/ruby/2.0.0/gems/execjs-2.0.1/lib/execjs.rb:5:in `<module:ExecJS>'
        from /opt/bundle/ruby/2.0.0/gems/execjs-2.0.1/lib/execjs.rb:4:in `<top (required)>'

対処法
Gemfileに下記2行を追加して、bundle updateをすればOK
gem 'therubyracer'
gem 'execjs'

2013年8月26日月曜日

ハッシュキーをシンボルに変換

ハッシュをJSONファイルにして、また戻しての時にハマったのがキー。
JSONファイルにした後に読み込むとシンボルが文字列になってしまうんですね。
他にもいろいろそんなケースが出てきそうなんですが。

Railsの機能にあるHashキーをシンボルに変換するsymbolize_keys
> {"a" => 1, "b" => 2}.symbolize_keys
=> {:a=>1, :b=>2}


JSON.parseでJSONを読み込んでハッシュのキーをシンボルにする場合は、:symbolize_namesのオプションを付与。
>hash = {"a" => 1, "b" => 2}
=> {"a"=>1, "b"=>2}
> json = hash.to_json
=> "{\"a\":1,\"b\":2}"
> JSON.parse(json)
=> {"a"=>1, "b"=>2}
> JSON.parse(json,  {:symbolize_names => true})
=> {:a=>1, :b=>2}