G-chan Square

じーちゃん/へたっぴの綴る、日々のつれづれとか。
twitterのまとめとゲームネタが中心。2015年からロードバイク/ミニベロ始めました。

rubyとrailsとCGI環境変数と

railsアプリ上で、端末のIPアドレス……いわゆる'REMOTE_ADDR'を取得しようした。

ま、じーちゃん、Rubyのことはほとんどわかってないんで、WEBを漁ったらこんなページを見つけた。

http://www.ruby-lang.org/ja/man/?cmd=view;name=cgi#a.bb.c8.cd.d1.ce.e3
なるほど。なるほど。
require "cgi"
cgi = CGI.new
value = cgi.auth_type
とかやればいいのか……と思って、さっそく試してみたところ……


動かないよ!ママン! (つД`)

もう、じーちゃんの人生、こんなんばっかりです。一日三回は「ママン!」叫んでるような気がします……orz


ん~、なんかよくわからないけど、またソース読んだら、
/usr/lib/ruby/1.8/cgi.rb
の中の "parse"ってメソッドに渡っている引数が null だかららしい。
NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.split):
    /usr/lib/ruby/1.8/cgi.rb:897:in `parse'
    /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/cgi_ext/raw_post_data_fix.rb:45:in `initialize_query'
    /usr/lib/ruby/1.8/cgi.rb:2274:in `initialize'
nullが渡った程度でエラー吐いて実行できないライブラリってどうなん?とか思うんですが、動かないものは動かないので、別の手段を探してみたところ……

http://d.hatena.ne.jp/sleepthief/20061128
なるほど。なるほど。
value = request.env["REMOTE_HOST"]
とかやればいいらしい。

やった、動いた~♪

でも、
require "cgi"
cgi = CGI.new
ってやった時点でもう動かないって、問題アリアリなんじゃ? よくわからないけど……rails使う場合にはrailsラッパ経由でなく直接cgiクラスを参照しちゃダメなのか?<そんなバカな。

う~ん、謎だ。