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) | 日記