2010年05月25日

Ruby on Rails ソース上でコマンド

Ruby on Rails ソース上でコマンド

ソース上でコマンドとは?


例えば動的にフォルダを作成したい場合などに
ソースの中に書いておく事が可能なのです。

環境


rails1.2.6
app/models/hoge.rb

フォルダ作成、フォルダ確認


$ vi hoge.rb
Hoge < ActiveRecord::Base
 class << self
  def mkdir
   root = "#{RAILS_ROOT}/public/images/users"
   FileUtils.mkdir(root)
   // これでusesフォルダが作成されます。
   FileUtils.mkdir_p(root)
   // pを付けると親フォルダもなければ作成します。
   FileUtils.mkdir_p(root) unless File.exist?(root)
   // File.exist?はrootが存在すればtrueを返します。
  end
 end
end


コピー


$ vi hoge.rb
Hoge < ActiveRecord::Base
 class << self
  def cp
   root = "#{RAILS_ROOT}/public/images/users"
   FileUtils.cp(root, "#{root}/hoge")
   // rootのフォルダをroot/hogeにコピーします。
  end
 end
end


移動と削除


$ vi hoge.rb
Hoge < ActiveRecord::Base
 class << self
  def mv_rm
   root = "#{RAILS_ROOT}/public/images/users"
   FileUtils.mv(root, "#{root}/hoge")
   // rootのフォルダをroot/hogeに移動します。
   FileUtils.rm_r("#{root}/hoge")
   // root/hogeフォルダを削除します。rがフォルダオプションです。
  end
 end
end


上記たちをコントローラーなどで呼び出せば完了です。
posted by RicK at 18:23| Comment(0) | TrackBack(0) | 日記

2010年05月24日

Ruby on Rails 日付 Rational

Rationalとは?


Rubyのメソッドの一つ、分母やら分子やらの計算に使うものですが、
日付と使う時は単に引き算や足し算をするために使うと考えた方がわかりやすいと思います。

環境


rails1.2.6

使用方法


今回はコンソール上で行います。
$ ruby script/console
>> time = DateTime.now
=> #<DateTime: 11785635520834403/4800000000,3/8,2299161>
// これで現在の日付
// しかしこれだとなんだかわからないので。
>> time1 = time.strftime("%Y-%m-%d %H:%M:%S")
=> "2010-05-24 14:37:24"
// 見てわかると思いますが、
// Y=年,m=月,d=日,H=時,M=分,S=秒です。
// 現在time1はstring型になってしまったので再度Date型にします。
>> time2 = DateTime.parse(time1)
=> #<DateTime: 17678455987/7200,0,2299161>
>> time2.strftime("%Y-%m-%d %H:%M:%S")
=> "2010-05-24 14:37:24"
// これで元通り
>> time3 = time2 - Rational(1,24)
=> #<DateTime: 17678455687/7200,0,2299161>
>> time3.strftime("%Y-%m-%d %H:%M:%S")
=%gt; "2010-05-24 13:37:24"
// これが本題のRationalです。見ての通り1時間引き算されています。

時間


Rational(1,24)
この24は24時間つまり1日を表しています。
そして1はそのうちの1時間を表していて、time2から1時間引くという事になります。


Raional(1,1440)
1440これは1日を分で表しています。
そして1はそのうちの1分を表していて、time2から1分引くという事になります。

最初に足し算引き算といいましたが、つまるところの分数での
足し算引き算をおこなってくれていますので、
1/24や1/1440などで計算してくれているわけです。

では1日はどうやって引き算しますか?
ちょっとためしてみてください。
posted by RicK at 15:02| Comment(0) | TrackBack(0) | 日記

2010年05月21日

Unix OpenSSL

OpenSSLとは?


暗号プロトコル。
https接続なんかはOpenSSLを使ってるわけですね。
この設定をしていると、データ通信が暗号化されて不正されにくい訳ですね。

環境


Apacheを入れたCentOS

RSA作成


$ cd /usr/local/apache2/conf/ssl
// フォルダなかったら作成
$ openssl genrsa -out hoge.key 1024
$ openssl req -new -key hoge.key -out hoge.csr.pem -sha1
Country Name (2 letter code) [GB]:JP
// 国名コード
State or Province Name (full name) [Berkshire]:Tokyo
// 都道府県名
Locality Name (eg, city) [Newbury]:Nihombashi Chuo-ku
// 市区町村名
Organization Name (eg, company) [My Company Ltd]:HOGE
// 企業名
Organizational Unit Name (eg, section) []:hoge
// 部署名 (オプション)
Common Name (eg, your name or your server's hostname) []:hoge.jp
// SSL/TLS を導入するドメイン名 (http://XXXX/ の XXXX)
Email Address []:なし
// メールアドレス (オプション)
A challenge password []:なし
// パスワード (オプション)
An optional company name []:なし
//企業名の略称 (オプション)

$ openssl x509 -in hoge.csr.pen -out hoge.crt -req -signkey hoge.key -days 365 -sha1


これをApacheで設定してあげれば完成
posted by RicK at 15:08| Comment(0) | TrackBack(0) | 日記

2010年05月20日

Ruby on Rails before_destroy after_destroy

before_destoryとは?


英語の通り削除前に行う処理です。

after_destroyとは?


英語の通り削除後に行う処理です。

使いどころ


前回とほぼ同様です、
AテーブルとBテーブルが存在し、
1対多の関係のテーブルだとして、
Aを削除したらBも削除するような設定を良くします。

環境


前回と同様

before_destroy、after_destroy


$ vi hoges_controller.rb
def hoge
 @hoge = Hoge.find_by_id(1)
 @hoge.destroy
end

$ vi hoges.rb
after_destroy
def after_destroy
 @boge = Boge.find_by_hoge_id(id)
 @boge.delete
end


これで、Hogeのレコードを削除したときに関連づいているBogeのレコードも
削除されます。

注意点


before_destroy、after_destroyは
destroyメソッドに反応します。
deleteで削除を行った場合、反応しませんのでご注意を
posted by RicK at 17:27| Comment(0) | TrackBack(0) | 日記

2010年05月19日

Ruby on Rails before_save after_save before_create after_create before_update after_update

before_save、before_create、before_updateとは?


英語の通り保存の前に行う処理です。

after_save、after_create、after_updateとは?


英語の通り保存の後に行う処理です。

使いどころ


hogeにレコードを追加すると同時に必ずbogeにもレコードを追加したい時などですね。
controllerにもかけますが、共通ならば重複しないほうがいいですし、
以前どこかにかきましたが、DBの処理はmodelに書いた方がcontrollerが綺麗になります。

環境


rails1.2.6
app/models/hoges.rb
app/controllers/hoges_controller.rb

before create、after_create


$ vi hoges_controller.rb
def hoge
 @hoge = Hoge.new
 @hoge.hoge = "HOGE"
 @hoge.save

$ vi hoges.rb
before_save
def before_save
 @boge = Boge.new
 @boge.boge = "BOGE"
 @boge.save
end

これでHogeテーブルにレコードを追加すると同時にBogeテーブルにもレコードが追加されます。

before_saveメソッドの中では、saveしたもののデータが渡ってきます。
※今回の場合は、Hogeテーブルのhogeカラムの"HOGE"
$ vi hoges.rb
def before_save
 @boge = Boge.new
 @boge.boge = hoge
 @boge.save
end

この"hoge"はHogeのhogeに入れた"HOGE"が入ります。

before_create、after_create


これは、処理を行うタイミングが変わるだけです。
createということで、作成するとき、つまりnewするときだけ適用されます。

before_update、after_update


もうわかると思いますが、
updateということで、更新するとき、つまりupdateするときだけ適用されます。

結構便利だったりしますので、これを使ってより良いソースコードを目指してみてください。
posted by RicK at 16:21| Comment(0) | TrackBack(0) | 日記

2010年05月18日

Ruby on Rails validate 一時解除

validateとは?


入力制限です。
数字しか入力しては行けないのに文字を入力するとエラー文言をだすといった感じです。

環境


rails1.2.6

使用方法


通常validateを設定すると、saveする時にかならず
validateを通ります。
基本的にそれでいいはずだし、本来無視してはいけないのですが、
なんらかの理由により通しても通したい場合があります。
だからといってvalidateをなくすなんてことはできなし。。。
といったときに便利です。
使用方法はものすごく簡単です。
@hoge = Hoge.new
@hoge.hoge = "HOGE"
@hoge.save(false)

1、Hogeテーブルの新規作成
2、Hogeテーブルのhogeカラムに"HOGE"を入力
  このときのhogeのvalidateは入力文字が2文字までとしておきましょう
3、保存します
  このとき本来ならば文字制限オーバーにより、弾かれるのですが、save(false)これによりvalidateを無視してくれます。

だいぶ簡単ですね。
posted by RicK at 16:08| Comment(0) | TrackBack(0) | 日記

2010年05月17日

Unix sshやscpでパスワード認証を不要にする方法

パスワード認証不要って?


本来sshやscpのコマンドを使用する場合、パスワード入力を求められます。
人がこれを行う時ならば、これで問題ないのですが、
プログラム上で行う場合はパスワードを打てないので弾かれてしまいます。
そんなときに、パスワード不要にすれば解決というわけです。

環境


Unixコマンドが使用できるserver1とserver2

設定方法


server1からserver2へ接続する
[server1]
$ ssh-keygen -t rsa
// 暗号作成
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
// 暗号をauthorized_keysに書き込む
// .sshがない場合は~/に作成する
$ chmode 700 .ssh
$ chmode 600 .ssh/authorized_keys

[server2]
$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
// server1のauthorized_keysをserver2のauthorized_keysに追記する
// 逆も行えば完了
posted by RicK at 14:38| Comment(0) | TrackBack(0) | 日記

2010年05月14日

Unix sudo権限追加

sudoとは?


一時的にrootと同様の権限を持つ事が可能となります。
rootは昨日の説明みてね。

権限追加とは?


基本的に最初はsudoは使えなかったとおもうので、
この設定をしてあげるとsudoが使える様になります。

必要性


なぜsudoが必要なのか?
やはりセキュリティー面のためです。
rootだとサーバを壊してしまったりすることが可能ですので、
rootにせず、それでいて重要なもののinstall作業などを行わせたい場合などに必要です。

設定方法


$ visudo -f /etc/sudoers
hoge ALL=(ALL) ALL
// hogeアカウントにrootと同様の権限を付与が可能です。
boge ALL=(hoge) ALL
// bogeアカウントにhogeと同様の権限付与が可能です。

基本は上記なのですが、上記だとrootの権限を全て付与している事になります。
なので、
$ visudo -f /etc/sudoers
hoge ALL=(ALL) mkdir

こんな風にすると、hogeユーザはrootのmkdirコマンドの権限だけが付与されます。

使用方法


sudo mkdir hoge

これでパスワードを聞かれて入力すればroot同等の権限を使って作成が可能です。
posted by RicK at 12:35| Comment(0) | TrackBack(0) | 日記

2010年05月13日

Unix rootログイン禁止

rootとは?


rootとはユーザの事です。
このユーザは最高責任者的なユーザで、
重要なアプリなどをinstallする時などは、
かならずrootの許可を取るか、rootになってinstallしなければなりません。

rootログイン禁止とは?


sshで、rootユーザで直接アクセスすることを禁止する事です。

必要性


セキュリティーをあげる為です。
単純にhogeユーザで接続してからrootになるのと
rootで直接接続するのでは、手間が増えます。
使用する人にとっては多少不便かもしれませんが、
rootで接続できる場合は、passwordさえどこかで知ってしまえば
接続が可能になってしまします。(以前書いたportを変えていれば+portを知る必要性がでます。)
しかし、他ユーザで入らなければならない場合は、
user名とpassword(+port)とrootのパスワードを知る必要が出てきます。(以前書いたsu設定をしておけば、指定のユーザしかrootになれない)
どちらがセキュリティーが高いかは、一目瞭然ですよね?

環境


Unixコマンド使える状態

設定方法


$ vim /etc/ssh/sshd_config
PermitRootLogin yes
// 39行目あたりの上記を下記に変更
PermitRootLogin no

$ /etc/init.d/sshd restart


これでrootからの接続は不可になります。
posted by RicK at 14:22| Comment(0) | TrackBack(0) | 日記

2010年05月12日

Unix su利用制限

su とは?


ユーザ変更です。
hogeというユーザからbogeというユーザに変更したい時に
$ su - boge
とすると変更できる。

環境


Unixコマンド打てる環境

設定方法


$ vim /etc/login.defs
SU_WHEEL_ONLY yes
// 上記追加

$ vim /etc/pam.d/su
#auth required pam_wheel.so use_uid
// 上記のコメントアウトを外して下記の様にする
auth required pam_wheel.so use_uid

$ vim /etc/group
wheel:x:10:root
// 上記に下記の様にユーザアカウントをプラス
wheel:x:10:root,hoge

これでrootとhoge以外のアカウントはsuを使用できない状態になります。
posted by RicK at 14:31| Comment(0) | TrackBack(0) | 日記

2010年05月11日

Ruby on Rails gettext

gettextとは?


エラーメッセージなどを日本語化してくれます。

環境


rails1.2.6
app/controllers/application.rb
app/views/layouts/application.rhtml
config/database.yml
config/enviroments.rb
Rakefile
Testテーブル

install方法


$ gem install gettext --version=1.90.0

※補足説明
gettextは、rails2.1まで使用可能です。
gettext2.0.0は、rails2.3.2に対応しているらしいですが、バグあるらしいです。
gettext1.9.3は、rails1.2.6に対応していないので、1.90.0を入れています。
でも
http://underscore.jp/diary/20080227.html
ここによると1.90.0も2.0対応になってしまったらしいので、1.10.0がいいかも。

設定方法


$ vi application.rhtmll
<html>
<header>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
// headerに上記を追加
// 共通のlayoutsに記述
</header>

$ vi database.yml
development:
 encoding: utf8
 // 使用している箇所(全部に入れておけばいい)にutf8を追加

$ vi enviroments.rb
$KCODE = 'u'
require 'jcode'
require 'gettext/rails'
// 上記2行を一番上に追加

$ vi application.rb
class ApplicationController < ActionController::Base
 init_gettext "test"
 // 上記追加
end

$ vi Rakefile
desc "Update pot/po files."
task :updatepo do
require 'gettext_rails/tools'
GetText.update_pofiles("test", #テキストドメイン名(init_gettextで使用した名前)
Dir.glob("{app,config,components,lib}/**/*.{rb,erb,rjs}"), #ターゲットとなるファイル
"test 1.0.0" #アプリケーションのバージョン
)
end

desc "Create mo-files"
task :makemo do
require 'gettext_rails/tools'
GetText.create_mofiles
end
// 上記全部追加

$ rake updatepo
$ make po/ja
$ cp po/test.pot po/ja/test.po
$ vi po/ja/test.po
#: app/models/test.rb
msgit "Test|title"
msgstr "タイトル"
// 上記3行を一番下に追加

$ rake makemo
// local/ja/LC_MESSAGES/test.moというファイルが作成されます。
これで完了


実行


validateでエラーを起こしてみてください
Testテーブルのtitleがタイトルになっているはずです。

日本語箇所の追加


po/ja/test.poにTest|titleと同じ様に追加してから
$ rake makemo

上記を実行すれば追加完了です。

syntax error?


自分の場合なぜか
/Library/Ruby/Gems/1.8/gems/gettext-1.90.0/lib/gettext/iconv.rbの
("EUC-JP", "TTF-8", "ほげ").joinがsyntax errorを起こしていたんですが、
特に必要なさそうだったのでコメントアウトして問題なく作動しました。
posted by RicK at 11:19| Comment(0) | TrackBack(0) | 日記

2010年05月10日

UNIX ssh接続のport変更

sshとは?


CP1からCP2へネットワークを介して接続する事ができます。
ネットワーク上を流れるデータは、暗号化されます。

portとは?


受け入れ先のようなもので、住所で言うとマンションの部屋番号をさします。

環境


Unixコマンドが使える2台のサーバ

設定方法


sshの使い方は
$ ssh hoge@192.168.2.2

こんな感じです。
通常ポートを指定しないと22番ポートに接続されます。
それでもいいといえばいいのですが、
より安全性を高めるために
(ポートの場所を変えれば、ID,PassWord,Portの3つがわからないと入れない為)
ポートを変えた方が望ましいです。

では、どう変えるのか。
$ vim /etc/ssh_sshd_config
// 多分13行目あたり
Port 22
// 下記に変更
Port 10022

$ vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
// 下記に変更
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 10022 -j ACCEPT

$ /etc/init.d/sshd restart
$ /etc/init.d/iptables restart
// 順番間違えると遠隔接続できなくなるので注意


ポートを変更して接続する方法は、
$ ssh hoge@192.168.2.22 -p 10022
posted by RicK at 18:11| Comment(0) | TrackBack(0) | 日記

2010年05月07日

Vim 設定

Vimの設定とは?


設定といってもオプションのようなもので、
この設定をしなくてもvim自体は使用可能です。
ただ、この設定を行う事により、行数を表示したり色をつけたりなど
見やすく、使いやすくする事が可能です。

環境


Unixコマンドたたける状態
~/.vimrc
hoge.rhtml

設定方法


$ vi ~/.vimrc
// 最初は.vimrcは存在していません。
// ~/は、ホームを表しており、/home/hoge/.vimrcなどの場所を示しています。
set number
// 行数表示

これだけ。

ではhoge.rhtmlを開いてみますか。
$ vi hoge.rhtml

hoge.rhtmlの中身は空でも何でもいいんですが、
一番左に行数でていませんか?
空だったら1が表示されているはずです。
vimのコマンドで
:行数
これで指定の行数に移動する事が可能なので、
こうゆう時なんかにもだいぶ便利です。
この機能は必須ですね。

もう一つ
$ vi ~/.vimrc
syntax on
// 文字に色をつけてくれます

メソッドだった場合色を分けてくれたりとこれもだいぶ便利です。
こんな感じで自分なりにvimをどんどんカスタマイズしてみてください。

ちなみにvimrcの設定はvimコマンドとしても使用可能です。(できないのもありますけど)
$ vi hoge.rhtml
:set number
// このvimコマンドを打つと行数がつきます。
:set nonumber
// このvimコマンドを打つと行数が消えます。
posted by RicK at 13:09| Comment(0) | TrackBack(0) | 日記

2010年05月06日

Ruby on Rails Vim 2

Rails Vimとは?


VimをRails用に拡張されたプラグインです。

環境


rails1.2.6
ruby1.8.6
コマンドたたける状態
app/views/hoge/hoge.rhtml
app/controller/hoge_controller.rb
app/model/hoge.rb

インストール


http://www.vim.org/scripts/script.php?script_id=1567
ここみてみて最新版を取得

なぜ-Oオプションを付けるかというと、「download_script.php?src_id=10297」
こんなかんじの名前で落ちてきておかしくなってしまうので、先に名前変えておきます。

$ mv rails.zip =/.vim/
$ unzip rails.zip

これで完了

使用方法


$ vi hoge.rhtml
Boge.find(:all)

viewのBogeの上にカーソルを移動して
gfと押してみてください
なんとびっくりBogeモデルの場所に移動します。
これはだいぶ便利ですよ。
開いているページのコントローラーやモデルに飛びたい場合は、
vim内で、
:Rcontroller
:Rmodel
と打てば遷移可能です。
ただ、これを打つと現在のページが切り替わるので、
vim内コマンドの
:vsiplitや:spなどで画面を分割してからやったほうが便利ですよ。
posted by RicK at 15:28| Comment(0) | TrackBack(0) | 日記

2010年04月30日

広告

ちょっと広告で見た目がわるくなってきたのでここに表示します。
それなりに厳選して広告とってきてるのでみてみてね〜。

サクラサーバ
今まさに使用しているやつですね。
自分が使っているのは500円のプランです。

sakura

aba

激安プロバイダー

toku

toku

スマイルサーバー
最初の費用色々無料★

sm

sm1


GMOインターネット ホスティングサービス
高い信頼性とサポート重視のサービスで国内最大級の導入実績を誇るGMOインターネットのレンタルサーバーサービス

ser2

ser1


FC2レンタルサーバー
なかなかお手頃価格

abw

am

ヘテムルレンタルサーバー

bax

aba

ZERO

ewahb

bah

ハイスペック仮想サーバ

kaso

kaso

263円でドメイン取り放題

dome

dome

100Gを超える大量ディスク

ba

tai

「デジマーケット」
自分のサイトで手軽にダウンロード販売が行えます。
degidegi2

「FC2レンタルサーバ」
さまざまな保守を行ってくれるので安心、ライトじゃないほうは10GBがあります。
fc3fc4

「ネクストスペース」
パーソナルプランというので500MBですが、167/月で可能です。
kaekae2

「Yahoo!ウェブホスティング」
2Gで980/月という値段もいいですがやはり有名どころという安心感があります。
yahooyahoo2

「デジデジ」
HP作成後こうした方がいいという指摘をユーザ内で行いポイント付与されてといったシステムが導入されています。
digidigi2

「シックスコア」
53Gで1890/月からなのでさすがにちょっとしたことには必要ないと思いますが、
ちゃんとしたサイトを立ち上げようなどと考えたときにいいかもしれません。
sixsix2

「シーサイドネット」
サーポートの返信が9分以内を実施しているサービス関連が充実しています。
serser2

「サーバーカウボーイ」
50Gで416/月って安すぎでしょうw
caca2

「SEO」
SEO対策を行ってあくせすと売上をアップ!
seo1seo

「クリエイティブ」
あなたは何を目指す?
gra2gra

「お名前.com」
仕事でもつかったことあるところで、DNSの設定とかできます。
vpsvps1

「マイティーサーバ」
自由度が高くシンプルなサービス
my1ma
うん。結構すっきりしたかな。
posted by RicK at 10:28| Comment(0) | TrackBack(0) | 日記

2010年04月27日

Ruby on Rails Vim

Vimとは?


テキストエディターソフトです。
Unixのコマンド上で何かする時で、なにかを編集したいときなんかによく使います。
基本的にvimは、デフォルトで入っているので知っていて損は有りませんよ。
(vimとかemacsとか使ってるとプロっぽいしw)

環境


rails1.2.6(vim自体とは関係なし)
MacやLinux、もしくはWindowsにUnixコマンドたたける状態

使用ディレクトリなど


app/views/hoge/hoge.rhtml

使用方法


コマンドをたたける状態で
$vim hoge.rhtml

これでokです。hoge.rhtmlを編集する画面に移動したはずです。
では、「HOGE」と書いてみましょうか。
iと打ってみてください。下の方に
-- INSERT --

ってでてません?これで入力モードです。
この状態で普通に「HOGE」と入力します。
打ち終わったらEnterを押しては行けませんよ?w
次の行へ行ってしまいますので、Escキーを叩いてください
下の方のINSERTが消えたはずです。
これで入力の完了です。

書いたからには削除もしてみましょう。
「HOGE」の「H」の上にカーソルを合わせて、
sを押してみてください。
「OGE」になったと思います。ついでにINSERTモードになっているのでご注意を。
1行まとめて消したい場合はddとdを二回続けて押してもらえれば、
カーソルが有る行が削除されます。

間違えて削除してしまった場合。
uを押せば一つ前の作業に戻ります。
連続で押せば結構前まで戻ってくれます。

後は移動ぐらいでかね。
上がk
下がj
右がl
左がh
です。

最低限これぐらい覚えていた方がいいと思いますよ。
そのうちもうちょっと詳しく書こうと思います。
posted by RicK at 15:07| Comment(1) | TrackBack(0) | 日記

2010年04月26日

Ruby on Rails 外部サイトより情報を取得する方法(Net::HTTP)

外部サイトより情報を取得って?Net::HTTPって?


例えば、広告を提供する会社からAPIを使用して広告を取得する場合、
htmlなどを取得する必要が有ります。
その時に使用するモジュールがNet::HTTPです。

環境


Rails1.2.6

使用ディレクトリなど


app/helpers/base_helper.rb
app/views/hoge.rhtml

使用方法


今回はヘルパーに書いてビューで呼び出してみます。
vi base_helper.rb
module BaseHelper
 include ActionView::Helpers::TagHelper
 def ad
  url = URI(http://hoge.jp/hoge/hoge)
   //広告会社から指定されたURL
  http = Net::HTTP.new(url.host)
   //hoge.jpだけを抜き出してくれます
  response = http.get(url.request_uri)
   //hoge.jp以降を抜き出してくれます。
  logger.info response.body
   //これが取得した中身です。
  return NKF.nkf('-xSw',response.body.gsub(/(\n|\r\n|\r)/,''))
   //文字コード変換
 end

vi hoge.rhtml
<%= ad %>

これで広告表示の完了です。
本来はいろんなパラメータがgetする時に必要になると思います。
posted by RicK at 18:23| Comment(0) | TrackBack(0) | 日記

2010年04月22日

Ruby on Rails execute

executeとは?


Railsのfind文ではどうしてもできない事が出てきたりします。
そんな時に、executeを使うとSQLを直接書く事が可能です。

環境


Rails1.2.6
PostgreSQL8.3.5

使用方法


findの場合
Hoge.find(:all, :conditions => ["id = ?"],1, :order => 'id')

executeの場合
Hoge.execute("SELECT * FROM Hoges WHERE id = 1 ORDER BY id")

この様になります。
executeの前のHogeは、普通ActiveRecord::Base.connection.executeってかくのかな?
まぁよくわかりませんが、どっちでもいいんじゃないですかね。

executeを使う方が速くなる場合などもあると思いますが、
railsを使う以上、使用できる場合はfindを使った方が賢明です。
posted by RicK at 16:58| Comment(0) | TrackBack(0) | 日記

2010年04月16日

PostgreSQL EXPLAIN ANALYZE(速度計算) チューニング

EXPLAIN ANALYZEとは?


select文を発行した時の検索速度を表示してくれます。

環境


PostgreSQL8.3.5

使用方法


$ psql -U hoge hoge
select * from feature_categories LEFT JOIN contents ON feature_categories.content_id = contents.id;

普通に検索結果が返ってきます。
EXPLAIN ANALYZE select * from feature_categories LEFT JOIN contents ON feature_categories.content_id = contents.id;
QUERY PLAN
----------------------
Merge Right Join (cost=1.23..2.23 rows=9 width=180) (actual time=14.269..14.305 rows=7 loops=1)
 Merge Cond: (contents.id = feature_categories.content_id)
 -> Index Scan using contents_pkey on contents (cost=0.00..17.99 rows=84 width=119) (actual time=14.210..14.230 rows=20 loops=1)
 -> Sort (cost=1.23..1.26 rows=9 width=61) (actual time=0.053..0.053 rows=7 loops=1)
  Sort Key: feature_categories.content_id
  Sort Method: quicksort Memory: 17kB
  -> Seq Scan on feature_categories (cost=0.00..1.09 rows=9 width=61) (actual time=0.006..0.007 rows=7 loops=1)
Total runtime: 14.439 ms

上記の様にながったらしい文がでてきます。
この数字が検索速度を示しています。・・・読む気がなくなってきますけどねw

解説


actual time : 検索時間
rows : 検索個数?
あ〜はっきりいって自分もよくわかりませんw
取りあえず個々のactual timeを見て飛び抜けて時間がかかっているところ、
Seq Scanが表示されているところをチェックしてください。
時間がかかっているところのrowsなんかを見てみて、
検索個数が多く、絞り込まれていなかった場合絞り込み条件などを変えてみたり、
JOINの順番を変えてみたりすると良いです。
Seq Scanは、indexが貼られていない場合に表示されます。
indexを貼ってみてください。

詳しい人いたら解説してくれると嬉しいです。
posted by RicK at 12:28| Comment(0) | TrackBack(0) | 日記

2010年04月15日

Ruby on Rail ページネート(Paginator)の詳細 2

ちょっと忙しくなってきた今日この頃。。。

ページネートって?


Rails ページネート(Paginator)みてね

詳細って?


Railsのページネートは、以前書いた様に
@pages,@hoges = paginate(:hoges......)

上記のような型で書きますが、これだと細かい設定をする時にできません。
細かい設定はとは、groupですね。自分はこれ以外の時にばらした記憶はないですねぇ。

環境


Rails1.2.6

使用ディレクトリなど


app/models/hoge.rb
app/controller/hoge_controller.rb
※app/views/hoge/list.rhtml
※app/views/hoge/_paginate.rhml
Hogeテーブル
※今回の方法は、viewの方には影響ないのでviewは省略します。
 viewが見たい人はRails ページネート(Paginator)みてね

使用方法


$ vi hoge_controller.rb
def list
 count = Hoge.count
 @pages = Paginator.new(self, count, 10, params[:page])
 @hoges = Hoge.hoge(@pages.items_per_page, @pages.current.offset)

$ vi hoge.rb
class Hoge < ActiveRecord::Base
 class << Base
  def hoge(limit, offset)
   find(:all, :select => 'id', :group => 'id',:limit => limit, :offset => offset)
  end
 end
end

今回のfind分は短いのでmodelに書かなくてもいいですけど、
長くなると見苦しいのでmodelに書いた方がきれいですよ。
普通のページネートの方もmodelにかければいいんですけどねぇ。
posted by RicK at 18:31| Comment(0) | TrackBack(0) | 日記