« Programmable-Voice | トップページ | 米ヤフーがグーグル抜き1位になったと聞いて調べたら意外な結果が。 »

2013年8月21日 (水)

Rubyのバージョンアップでハマった件

利用しているレンタルサーバーでRubyのバージョンアップ(1.8.6→2.0.0)がありコードを修正したのですがけっこうハマったので他のサーバーでの作業の時の為にメモしておきます。


修正1:フォームデータ取得

(エラーログ)
[error] custom_require.rb:36:in `require': cannot load such file -- cgi-lib (LoadError)

(原因)
フォームデータを受け取る為に使用していたライブラリ"cgi-lib"がRuby2.0.0ではサポート外のため。

(対処)
ライブラリ"cgi"を使う(require "cgi")。

ちなみに、ライブラリの変更にあわせて一部メソッドも変更する必要がありました。
フォームデータの要素数のカウント方法を変更せずに実行したら修正2のエラーが発生しました。


修正2:修正1の影響

(エラーログ)
[error] : undefined method `length' for #<CGI:0x285b4924> (NoMethodError)

(問題のコード)
if $input.length == 0 then ~ end

(原因)
cgiを使い取得したフォームデータの要素数のカウント方法が不正のため。

(対処)
ハッシュ"CGI#params"をカウントするように変更。

(修正後のコード)
if $input.params.length == 0 then ~ end

(参考ページ)
修正3:ファイルの文字コード

(エラーログ)
[error] :in `split': invalid byte sequence in US-ASCII (ArgumentError)

(問題のコード)
f = open("text.txt")

(原因)
ファイルから取得した内容の文字コードをUS-ASCIIと扱おうとしているのに実際は他の文字コードだったのでメソッド"split"でエラーとなった。

(対処)
ファイルオープン時に文字コードを指定する。

(修正後のコード)
f = open("text.txt", "r:UTF-8")


修正4:force_encoding

(エラーログ)
[error] :in `sub',
[error] : invalid multibyte character: /\\x.../ (RegexpError),

(問題の部分)
str.sub(pattern, replacement)

(原因)
置換メソッドsubのパラメーターpatternに不正な2バイト文字列が指定されたため。

(対処)
パラメーターpatternをforce_encodingメソッドで文字コードをUTF-8に変更(pattern.force_encoding("utf-8"))。


修正5:電子署名

(エラーログ)
[error] :in `block in hmac_sha256',
[error] : undefined method `^' for "4":String (NoMethodError),

(原因)
amazon Product Advertising APIにて使用する電子署名の処理がRuby2.0.0に未対応のため。

(参考ページ)

余談

今回はレンタルサーバー会社さんが日時を決めてサーバー内のrubyをバージョンアップ(1.8.6→2.0.0)させたので、両バージョンで動くコードを事前に用意する必要がありました。
一部はrubyのバージョン別に処理を分岐させたりして面倒でした。

もっとうまい方法もあったかもしれませんが、最後は力業で終わらせた感じ。さらに泥臭いコードになったなぁ。そのうちリファクタリングしようと思ってもやらないんだよなぁ。

« Programmable-Voice | トップページ | 米ヤフーがグーグル抜き1位になったと聞いて調べたら意外な結果が。 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/533352/58036095

この記事へのトラックバック一覧です: Rubyのバージョンアップでハマった件:

« Programmable-Voice | トップページ | 米ヤフーがグーグル抜き1位になったと聞いて調べたら意外な結果が。 »

最近の作品

つぶやき

ウェブページ

無料ブログはココログ