とにかく一意な値が欲しいときないですか?そういうのにシーケンスとか使っている人もいるかもしれない。でもシーケンスって意外にかぶるんだよね。いくつまでいってるかわかんなくなったりして。
rubyの最近のブログ記事
とにかく一意な値が欲しいときないですか?そういうのにシーケンスとか使っている人もいるかもしれない。でもシーケンスって意外にかぶるんだよね。いくつまでいってるかわかんなくなったりして。
パスワードにはsaltをかけてハッシュ化する、というところまではいいんだけど、saltをどこに保持するのか?というところで悩ましい。
saltの保持の仕方候補は3つ
1.DBテーブル
2.外部ファイル
3.ソースベタ書き
例えばブックマークに追加した人をDBにカウントアップしていく場合とか、active_recordには便利なメソッドがある。
Hoge.update_counters(id, counters) だ。
bookmark_countがカラム名だとすると
Hoge.update_counters(1, :bookmark_count => 1)
みたいにする。
そうすると
update hoge
set bookmark_count = bookmark_count + 1
where id = 1
という感じに処理してくれる。
カラムのところはcountersとなっていて、どうやらいくつでも指定できるっぽい。
僕は必要なかったからやってないけど。
エラーがでたらそれはたぶん引数の型がおかしいのでご確認ください。
例えばidをクエリから拾ってくる場合は、intに変換する必要があったりとか。
Hoge.update_counters(params[:id].to_i, :bookmark_count => 1)
あと、カウント値はマイナスでもよいようです。
あと、文体で唯一統一していた一人称も、てきとーにすることにしました。
以上、よろしくお願いします。
前回のXREAにrailsをインストールでrailsの環境が整った。ということにする。
ローカル環境で動作を確認したアプリが、XREAのSVNにコミットされている。ということにする。
railsアプリは$HOME/rails_appフォルダにいれることにする。
mkdir rails_app
cd rails_app
svn co file:///virtual/YOUR_ID/svn/path_to_your_repo ap_name
cd ap_name/config
vi environment.rb
#追加
$LOAD_PATH.push("/virtual/{YOUR_ID}/lib/ruby/site_ruby/1.8")
$LOAD_PATH.push("/virtual/{YOUR_ID}/lib/ruby")
ENV['GEM_HOME'] ||= '/virtual/{YOUR_ID}/lib/ruby/gem'
cd ap_name/public
vi dispatch.cgi
#!/usr/local/bin/ruby
#先頭行を↑に
公開領域にシンボリックリンクをはる。
cd $HOME/public_htmlln -s ../rails_app/ap_name/public dir_name
これでOK!のはず!
前回の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になってるんだけどそこの設定の問題でした。