====== Ruby ====== ===== Gems ===== ==== gem 自体の更新 ==== gem update --system ==== インストール ==== gem install ==== インストール済み gem の更新 ==== gem update ==== 依存関係の表示 ==== gem dependency <名前> (例) rails 2.1.2 が依存する gem を表示 gem dependency rails -v 2.1.2 -v を省略した場合は最新のインストール済み rails が依存する gem が表示されます。 ==== デバッグ用 ==== sudo gem install ruby-debug sudo gem install ruby-debug-ide NetBeans 6.5 では ruby-debug-ide が 0.3.x のみ認識するため、バージョンを指定。 sudo gem install ruby-debug sudo gem install ruby-debug-ide -v 0.3.3 ====== Network ====== ===== メール ===== ==== smtps(smtp + ssl)でメール送信 ==== - gem で tlsmail をインストール\\ gem install tlsmail - メール送信サンプル - メール1通送信\\ Net::SMTP.enable_tls( OpenSSL::SSL::VERIFY_NONE ) Net::SMTP.start('smtp.gmail.com', 587, 'localhost', 'foo@bar.xxx', 'password', :plain) { |smtp| smtp.send_mail < - メール送信サンプル - メール連続送信\\ Net::SMTP.enable_tls( OpenSSL::SSL::VERIFY_NONE ) smtp = Net::SMTP.start('smtp.gmail.com', 587, 'localhost', 'foo@bar.xxx', 'password', :plain) contents.each { |content| smtp.ready( 'foo@bar.xxx', 'bar@foo.xxx' ) { |f| f.puts 'From: foo@bar.xxx' f.puts 'To: bar@foo.xxx' f.puts 'Subject: hello' f.puts f.puts content } } smtp.finish ruby 1.9 からは tlsmail を入れなくても、標準で使えるようになるらしい。\\ (参考) http://d.hatena.ne.jp/zorio/20070318/1174226862 ===== HTTP ===== ==== シンプルなパターン ==== require 'net/http' res = Net::HTTP.get( 'www.xxx.dom', '/index.html' ) puts res.body ==== 通常のパターン ==== require 'net/http' require 'uri' Net::HTTP.version_1_2 uri = URI.parse( 'http://host/path?query=parameter' ) Net::HTTP.start( uri.host, uri.port ) {|http| res = http.get( uri.path + '?' + uri.query ) puts res.body } ==== HTTPヘッダを指定 ==== #!/usr/bin/ruby -Ku require 'net/http' Net::HTTP.version_1_2 require 'uri' uri = URI.parse( 'http://host/path?query=parameter' ) http = Net::HTTP.new( uri.host, uri.port ) http.start { req = Net::HTTP::Get.new( uri.path + "?" + uri.query ) req['User-Agent'] = "ruby script" res = http.request( req ) puts res.body } ==== SSL 接続 ==== #!/usr/bin/ruby -Ku require 'net/http' require 'net/https' Net::HTTP.version_1_2 require 'uri' uri = URI.parse( 'http://host/path?query=parameter' ) http = Net::HTTP.new( uri.host, uri.port ) http.use_ssl = true http.ca_file = "/opt/local/lib/ruby1.9/gems/1.9.1/gems/rubygems-update-1.3.5/test/public_cert.pem"; http.verify_mode = OpenSSL::SSL::VERIFY_PEER http.verify_depth = 5 http.start { req = Net::HTTP::Get.new( uri.path + "?" + uri.query ) req['User-Agent'] = "ruby script" res = http.request( req ) puts res.body } * 証明書チェックを行わない場合は、次の行を記述する。\\ http.verify_mode = nil ==== テキストデータを Post ==== #!/usr/bin/ruby -Ku require 'net/http' require 'uri' uri = URI.parse( 'http://somedomain/path/script' ) Net::HTTP.start( uri.host, uri.port ) { |http| header = { 'User-Agent' => "ruby script" } body = < ==== URL Encoding された文字列を Post ==== Net::HTTP::Post を使う #!/usr/bin/ruby -Ku require 'net/http' require 'uri' uri = URI.parse( 'http://somedomain/path/script ) Net::HTTP.start( uri.host, uri.port ) { |http| req = Net::HTTP::Post.new( uri.path ) req['User-Agent'] = "ruby script" req.set_form_data( {:id => "1", :name => "hoge"}, "&" ) res = http.request( req ) # HTTP Status print "HTTP "; puts res.http_version print res.code print " " puts res.message # HTTP Header puts res["Content-Type"] p res.body puts res.body } ====== Tips ====== ==== vim.ruby ==== === 2桁でのインデント設定 === au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2 を記述。 * Unix系 vim の場合\\ ~/.vimrc * Windows用 Kaoriya版 vim の場合\\ ホームディレクトリの _vimrc ==== I/O ==== * 標準入力から読み込む while data = gets # 行単位処理 end ==== Windows でクリップボードからデータを取得 ==== require 'win32/clipboard' clipboardtext = Win32::Clipboard.data === インストール === 次の順に gem install\\ - windows-api - windows-pr - win32-api - win32-clipboard rubyforge から DL して、ローカル(gem install -l)からインストールする場合は次の URL から。\\ http://rubyforge.org/frs/?group_id=85&release_id=25233 ==== rgmagick ==== 次の URL から環境に合わてモジュールをダウンロード\\ http://rubyforge.org/frs/?group_id=12&release_id=30561 === windows === * rmagick-win32 の RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip をダウンロード * ダウンロードした zip ファイルを展開 * ImageMagick-6.4.8-6-Q8-windows-dll.exe を実行 * gem install rmagick -l でローカルファイル rmagick-2.9.0-x86-mswin32.gem をインストール === mac === * sudo port install ImageMagick * rmagick-osx-installer の rm_install-1.2.1.zip をダウンロード ====== Trouble Shooting ====== ==== 文法 ==== ruby 1.8.7 で次のエラーが発生。 undefined method `length' for # 1.8.7 から String#chars が Enumerable::Enumerator を返すようになったため。\\ String#chars のかわりに、String#mb_charsを使うことで回避可能。 Rails 1.2.6 の ActionView の truncate メソッドも内部で呼び出しているようなので、その場合は ruby 1.8.6 を使用。 ===== gem ===== ==== gem 1.2.0 => 1.3.1 への update に失敗する(Windows) ==== gem update --system を実行すると、lib\ruby\gem\1.8\cache に rubygems-update-1.3.1.gem がダウンロードされますが、 c:\>gem update --system Updating RubyGems Updating rubygems-update Successfully installed rubygems-update-1.3.1 ERROR: While executing gem ... (NameError) undefined local variable or method `remote_gemspecs' for # というエラーが発生。 そこで続けて update_rubygems を実行。 c:\>update_rubygems Installing RubyGems 1.3.1 mkdir -p C:/bin/ruby/lib/ruby/site_ruby/1.8 mkdir -p C:/bin/ruby/bin (中略) Installing rubygems-1.3.1 rdoc into C:/bin/ruby/lib/ruby/gems/1.8/doc/rubygems-1.3.1/rdoc (中略) RubyGems installed the following executables: C:/bin/ruby/bin/gem If `gem` was installed by a previous RubyGems installation, you may need to remove it by hand. gem のバージョンを確認すると c:\>gem -v 1.3.1 === 2009.02.13 補足 === 次の手順が正しいです gem install rubygems-update update_rubygems === ActiveScriptRuby === ActiveScriptRuby を使っている場合は gem.bat が |@"ruby.exe"" "%~dpn0" %*| とタブルクォートが余分についてしまうので、次のように削除しておきましょう。 @"ruby.exe" "%~dpn0" %* ==== Windows で gem install sqlite3-ruby を実行するとエラーが発生 ==== 次のエラーが発生 Building native extensions. This could take a while... ERROR: Error installing sqlite3-ruby: ERROR: Failed to build gem native extension. "c:/Program Files/ruby-1.8/bin/ruby.exe" extconf.rb install sqlite3-ruby checking for fdatasync() in rt.lib... no checking for sqlite3.h... no nmake 'nmake' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 sqlite-ruby 1.2.4 からは DLL は配布されず、ソースのみが配布されるようになったため、1.2.3 を指定してインストール。 gem install sqlite3-ruby -v 1.2.3 ==== 存在する gem に対する require がエラーになる ==== 環境変数を設定する export RUBYOPT=rubygems set RUBYOPT=rubygems またはプログラムの先頭で rubygems を require require 'rubygems' するとうまくいくらしい。 ==== Windows環境で mysql のインストールに失敗する ==== Windows 環境で gem install mysql を実行すると、 ERROR: While generating documentation for mysql-2.7.3-x86-mswin32 ... MESSAGE: Unhandled special: Special: type=17, text="" というエラーが発生。\\ ドキュメントは生成されていないが、mysql 用ライブラリのインストールは成功している。\\ エラーメッセージが気になる場合は、ドキュメントを生成しないオプションを追加。 gem install mysql --no-rdoc --no-ri