内容へ移動
memo
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
lang:ruby
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Ruby ====== ===== Gems ===== ==== gem 自体の更新 ==== gem update --system ==== インストール ==== gem install <gem名> ==== インストール済み gem の更新 ==== gem update ==== 依存関係の表示 ==== gem dependency <名前> (例) rails 2.1.2 が依存する gem を表示 gem dependency rails -v 2.1.2 -v を省略した場合は最新のインストール済み rails が依存する gem が表示されます。 ==== デバッグ用 ==== <code> sudo gem install ruby-debug sudo gem install ruby-debug-ide </code> NetBeans 6.5 では ruby-debug-ide が 0.3.x のみ認識するため、バージョンを指定。 <code> sudo gem install ruby-debug sudo gem install ruby-debug-ide -v 0.3.3 </code> ====== Network ====== ===== メール ===== ==== smtps(smtp + ssl)でメール送信 ==== - gem で tlsmail をインストール\\ gem install tlsmail - メール送信サンプル - メール1通送信\\ <code> 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 <<EOF, 'foo@bar.xxx', 'bar@foo.xxx' From: foo@bar.xxx To: bar@foo.xxx Subject: hello hello world EOF } </code> - メール送信サンプル - メール連続送信\\ <code> 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 </code> ruby 1.9 からは tlsmail を入れなくても、標準で使えるようになるらしい。\\ (参考) http://d.hatena.ne.jp/zorio/20070318/1174226862 ===== HTTP ===== ==== シンプルなパターン ==== <code> require 'net/http' res = Net::HTTP.get( 'www.xxx.dom', '/index.html' ) puts res.body </code> ==== 通常のパターン ==== <code> 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 } </code> ==== HTTPヘッダを指定 ==== <code> #!/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 } </code> ==== SSL 接続 ==== <code> #!/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 } </code> * 証明書チェックを行わない場合は、次の行を記述する。\\ http.verify_mode = nil ==== テキストデータを Post ==== <code> #!/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 = <<CONTENTS key=value CONTENTS res = http.post( uri.path, body, header ) print res.body } </code> ==== URL Encoding された文字列を Post ==== Net::HTTP::Post を使う <code> #!/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 } </code> ====== Tips ====== ==== vim.ruby ==== === 2桁でのインデント設定 === au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2 を記述。 * Unix系 vim の場合\\ ~/.vimrc * Windows用 Kaoriya版 vim の場合\\ ホームディレクトリの _vimrc ==== I/O ==== * 標準入力から読み込む <code> while data = gets # 行単位処理 end </code> ==== 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 で次のエラーが発生。 <code> undefined method `length' for #<Enumerable::Enumerator:0x46b0680> </code> 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) ==== <code>gem update --system</code> を実行すると、lib\ruby\gem\1.8\cache に rubygems-update-1.3.1.gem がダウンロードされますが、 <code> 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 #<Gem::Commands::UpdateCommand:0x2c77dcc> </code> というエラーが発生。 そこで続けて update_rubygems を実行。 <code> 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. </code> gem のバージョンを確認すると <code> c:\>gem -v 1.3.1 </code> === 2009.02.13 補足 === 次の手順が正しいです <code> gem install rubygems-update update_rubygems </code> === ActiveScriptRuby === ActiveScriptRuby を使っている場合は gem.bat が |@"ruby.exe"<color red>"</color> "%~dpn0" %*| とタブルクォートが余分についてしまうので、次のように削除しておきましょう。 @"ruby.exe" "%~dpn0" %* ==== Windows で gem install sqlite3-ruby を実行するとエラーが発生 ==== 次のエラーが発生 <code> 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' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 </code> 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 を実行すると、 <code> ERROR: While generating documentation for mysql-2.7.3-x86-mswin32 ... MESSAGE: Unhandled special: Special: type=17, text="<!-- $Id: README.html, v 1.20 2006-12-20 05:31:52 tommy Exp $ -->" </code> というエラーが発生。\\ ドキュメントは生成されていないが、mysql 用ライブラリのインストールは成功している。\\ エラーメッセージが気になる場合は、ドキュメントを生成しないオプションを追加。 gem install mysql --no-rdoc --no-ri
lang/ruby.txt
· 最終更新: 2016/01/27 09:47 (外部編集)
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ