ruby: 2008年6月アーカイブ

前回のXREAにrubygemをインストールの続きで、gemがインストールできたのでrailsをインストールする。

といっても
gem install rails
するだけなので、メモしなかったんだけど、これだと最新(08/06/29時点で2.1)が入っちゃって都合がわるい場合がある。

ので、バージョン指定をしてインストールする方法をメモ。

gem install rails -y -v 2.0.2※これだと2.0.2と最新の2つが入ってしまっていた。
gem install rails --version 2.0.2 -y※これもいろいろ足りなくて自分のアプリが動かなかった。。
gem install rails --include-dependencies --version 2.0.2 -y
※筆者は2.0.2がほしかった。

ちなみになぜかこのインストールって、しくじるんだけどリトライするとうまくいく。
ので、くじけないことがポイント。

前提として、すべてHOMEディレクトリ直下にインストールする。
インストールするソースとかはHOMEディレクトリ直下にsrcディレクトリを作ってそこに展開する。

環境変数の設定
~>vi .bashrc
export PATH=$PATH:$HOME/bin
export RUBYLIB=$HOME/lib/ruby/site_ruby/1.8:$HOME/lib/ruby
export GEM_HOME=$HOME/lib/ruby/gem


gemをダウンロード。
~/src> wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
解凍して移動。
~/src> tar zxf rubygems-0.9.4.tgz
~/src> cd rubygems-0.9.4/

インストールディレクトリの指定
~/src/rubygems-0.9.4> ruby setup.rb config --prefix=$HOME

で、バグなのか$HOMEだって言ってんのに/usr/local/lib~なところにインストールされる設定になっているのでviとかで書き換える。
~/src/rubygems-0.9.4> vi .config

こんな感じで置換
:%s/\/usr\/local\/lib/\$libdir/

インストール
~/src/rubygems-0.9.4> ruby setup.rb setup
~/src/rubygems-0.9.4> ruby setup.rb install
~/src/rubygems-0.9.4> gem -v
0.9.4

以上、よろしくお願いします。

サイトのヘッダ・フッタなど、同じところは使えるところはパーツに切り出して各ページから呼び出すのが常套手段。たまーに、これをやっていないWEBサイト構築プロジェクトがあるけど、そういうプロジェクトはまず火ーふいててそんなことをする余裕がないから、という理由にもならない理由でやってないだけ。

ともかく、railsにPHPのsymphonyのパーシャルみたいのがあったので使ってみる。

こちらを参考にさせていただきました。
http://wota.jp/ac/?date=20050721

app/controllers/hoges_controller.rbのviewでapp/views/hoges/index.html.erbの中身を分解してみる。

ヘッダ、メイン、フッタという3分割が普通かもだけど、今んとこヘッダもフッタもレイアウト変更はない、という前提にする。
と、ファイル自体は以下の2つに分かれる。


■app/views/layouts/hoges.rhtml
※hogesはコントローラ名
※layoutsフォルダはなければ作る

<html>
<head>
  <title><%= @title %></title>
</head>
<body>
~ヘッダコード(グローバルナビとか)~
<%= @content_for_layout %>
~フッタコード~
</body>
</html> 

■app/views/hoges/index.html.erb

hoge.rhtmlの
<%= @content_for_layout %>
にあたるHTMLコード

おっ、なにもつっかからずにできた。
こりゃ便利。

前回の続き。

サインアップすると、ログインIDに指定したメールアドレスにメールが届くところまでできた。

メールには、アクティベーションのURLが記載され要るけど、まだ押しても
No route matches "/activate/0cafee822db454ba2e4093cef3578e34862e3" with {:method=>:get}

みたいなメッセージがでちゃう。

routes.rbに以下の設定をする。
map.resource :session
map.connect "activate/:activation_code", :controller => "users", :action => "activate"

特にサーバの再起動もせずにこれでログイン可能になる。

っつっても、ログインした後に見せるコンテンツがない。。。
今日はここまで。

筆者はIDE好きだ。JAVAとPHPとrubyをいじるときにはIDEを使う。もちろんEclipseだ。だってタダだから。
Eclipseだけがタダなわけじゃないけど、EclipseはJava以外でも使い勝手がだいたい予想できるし、例えばSubversionとか言語依存しないところについては横断的に経験が活用できるので多少Eclipseよりよさそうな選択肢があっても採用を見送ってきた。
逆に、Eclipse以外の選択肢がさも今後流行るかも的なノリで技術サイトに載っていたりすると「ヤメテクレ」とさえ思っていた。

ところが、rubyに関してはメソッド参照が効かない(ホントは効くのかもしんないけど)ことがけっこう痛いなーと常々思っていたことと、こんなものを読んでしまったのでNetBeansを使ってみないわけにはいかなくなった。
http://codezine.jp/a/article/aid/2482.aspx?p=1

最近仕事が忙しくて、セットアップログも逐一書く気力がないので、超ざっくり書いておく。

ここで、ruby用のをゲット
http://download.netbeans.org/netbeans/6.1/final/?pagelang=ja

ここで、subversionのクライアント(Windows用)をゲット
http://www.collab.net/downloads/netbeans/

後は、NetBeansをいじりながら、なんとなくやるとできる。
あ、一つだけ詰まった。
筆者は、SVNはsvn+sshでつないでるんですけど、この場合にはplinkが要ります。
で、plinkってなんことかよくわからなくって、NetBeansの例に従って
plink -l xxxx -pw xxxx
ってやってたんだけど、ウンともスンともいわない。
要はこれ、puttyってツールのコマンドラインツール?でputtyが入ってないと使えない。
「puttyがないです」とかそういうメッセージがでてくれればいいのに、ウンともスンとも言わないでずーっと待たされたせいでけっこう時間を使ってしまった。
puttyインストールしたら
'C:\Program Files\PuTTY\plinkw.exe' -l xxxxx -pw xxxx
でOK。シングルクォートで囲むとこが味噌。
あと、ここも少し時間くっちゃったんだけど
plink
じゃなくて
plinkw
を使うのです。

これでSVNにアクセスできるはず。
Eclipseでコミットしたソースをチェックアウトしてどきどきしながらメソッド参照してみたらできた。これは筆者にとってはでかい。

しばらく使ってみよう。

ログイン周りをrestful_authenticationを使ってやりなおした。
loginにemailを使うというのは変えない感じで。

インストールとかログとるのを忘れたので省略。
インストール後からの修正履歴メモ。

app\models\user_mailer.rb
メールの受信者をloginに。
@recipients = "#{user.email}"

@recipients = "#{user.login}"


app\models\user.rb
4、5箇所あるemail系の記述をとったり変えたり。


で、サインアップ!

画面はうまくいった風だけどメールがこない。


調べたらオブザーバー(observer)とやらの設定が必要なんだという。
オブザーバってなんだ?ということで調べて理解できたのがこのサイト。
http://gendosu.ddo.jp/redmine/wiki/rails/Observer%E3%81%A8%E3%81%AF
※一瞬MSのサイトかと思って消すとこだった。。

config\environment.rb
以下の行を足す。
config.active_record.observers = :user_observer

で、サインアップ!

画面はうまくいった風だけどメールがこない。
実は、ずっとメールサーバってどうなってんのかなー、WEBサーバもついてるくらいだから、メールサーバもよろしくやってくれてんのかなー、と思ってたんだけど、そうはいかないらしかった。メールサーバの設定がいる。
ここを参照。
http://www.avnetlabs.com/rails/restful-authentication-with-rails-2


config\initializers
ここにmail.rb(名前はなんでもいいって)というファイル名で中身は以下をベースに適宜修正。

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
    :address => "mail.example.com",
    :port => 25,
    :domain => "www.example.com",
    :authentication => :login,
    :user_name => "user@example.com",
    :password => "secret"
}
で、サインアップ!

画面はうまくいった風だけどメールがこない。
だめだ。もう限界。続きはまた明日以降。。

ところで今回は(も)、押忍の人のサイトを参考にしてたんだけど、オブザーバーのところについては、オブザーバーが好きじゃないということで載ってなかった。が、押忍(オスで変換されない)の人クラスになったら「好きじゃない理由」を書いておいてくれると筆者みたいな駆出しの勉強になるので、もし、万が一、ひょんなことからコレを見て、どういうわけかわからないけど、天からの声もあいまって書く気になったら書いてくれると先生のいない筆者としては感謝感激雨嵐。

押忍。

追記(6/11):
うまくいった。自鯖がG/Wになってるんだけどそこの設定の問題でした。

ruby コロン

| | コメント(0) | トラックバック(0)

railsが吐くソースを見ていると、:loginとか:passwordとかコロン付の文字列がしこたま存在する。

あまりにも調べることが多すぎてスルーしてきたけど、なにか不意に気になったので調べた。

結果、ここを見つけて読ましてもらって8割がた理解しました。
RubyのSymbol
残り2割は、自然に理解する時を待ちます。


<% form_tag({:action => :search}, {:method=>"get"}) do %>

これでイケる。

前回のruby on rails でログイン機能の続き。

エラーの内容はcrypted_passwordがない。みたいな感じだった。
要はActs_as_authenticatedはpasswordをMD5でハッシュ化したものをcrypted_passwordというカラムに入れているらしかった。

すばらしい。パスワードはサイト管理者ですらも知ることができない状態にあることがセキュリティ上好ましい。筆者がシバシバ勉強させてもらっているWeb屋のネタ帳さんもそういってた。というか、コレで筆者はこの常識に気づかされた。

ちょっと話が脱線するが、ネタ帳さんは"abcd123"をハッシュ化すると"79cfeb94595de33b3326c06ab1c7dbda"という文字列になる、という例を出しがら「この32桁の文字から元の値を割り出す方法は無い」とおっしゃっている。が、これは間違いである。
ネタ帳さんがおっしゃっているとおり、ハッシュは復号化できない不可逆な値を生成する。じゃあどうやったら割り出せるのかだけど、要はハッシュ化する前の元の値を知ればよいわけで。そう。ググってみるのだ!実際に「79cfeb94595de33b3326c06ab1c7dbda」をググルとネタ帳さんのページがヒットして「abcd123」だと言うことがわかる。
他にもブログとかSNSとかだと個人ページのURLにユーザーIDをハッシュ化したものを使っているものも多いため、ググルとけっこうな確率で元ネタがわかったりする。
※こんなもん完全な揚げ足とりなのはわかっているのでそこはノーつっこみで。

知っている人からすれば「暗号化に使うハッシュはsaltとセットなのは暗黙知だろ!」とおっしゃられるかもしれない。けど、世の中けっこうそうでもなくて、同様の仕組みをとっているシステムでもsaltを使ってないケースのほうが筆者の経験上多いし、上述のようなURLの例もある。
※saltについては"ハッシュ salt"でググるべし。

また、このご時勢でも未だに貧弱なパスワードを使っている人は多い。というか大半だと思われる。ユーザーIDと同じ、とかはまだマシなほうで、特にビビるのが数字オンリーなパスワードを使っている人。しかも4桁とかだとキャッシュカードと同じである可能性も高い。まあ、数字4桁くらいの話になると、これはもうそれを許容するシステムが悪いって気がするけど。
とにかく、、セキュリティはユーザビリティを確実に損なうものなのでさじ加減が難しいけど、パスワードってくらいだから意識はするべきだしsaltはかけときましょうってことで。なお、Acts_as_authenticatedはちゃんとsaltを使っている。

というわけで、Acts_as_authenticatedのDB構成とかを確認して、結局、usersテーブルはmigrateを使って作ることにした。
generateしたときに00n_create_users.rb(nは数字)ができているので、そこからemailの行だけ消してmigrationする。
※IDはメールアドレスを使うという仕様にする予定なので

これで、OK牧場!

このアーカイブについて

このページには、2008年6月以降に書かれたブログ記事のうちrubyカテゴリに属しているものが含まれています。

前のアーカイブはruby: 2008年5月です。

次のアーカイブはruby: 2008年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。