2011年5月31日火曜日

railsのタイムスタンプを無効にする

特定コントローラーの場合は、無効にしたい動作のメソッド内で
Entry.record_timestamps = false

railsの更新をgitを使って行う@serversman

サーバとローカル環境にgitのインストールは事前に行ってください。
serverにインストールっていってもyum install gitでほぼOKだけど。

まずはローカル環境でgitのファイルをコミットする。

Railsアプリの作成。すでにある場合は、そのフォルダの中に移動する。
# rails sample
# cd sample

gitの初期化。
# git init

余計なファイルが入らないよう、無視するファイルを指定する。
# vim .gitignore

以下の内容を追記
.bundle
db/*.sqlite3
log/*.log
tmp/**/*
tmp/*
vendor/bundle
doc/api
doc/app
*.swp
*~
.DS_Store
で、保存する。

gitのファイルを追加して、コミットする。
# git add .
# git commit -m 'comment'

これでローカルの部分は完了。
次はサーバ。
まずはリポジトリを保存するディレクトリを作る。
ここでは/home/user/repo/sample.gitに置くことにする。
# mkdir repo
# cd repo
# mkdir sample.git
# cd sample.git

初期化。--bareを付けること。
# git init --bare

ローカル環境からサーバへデータを更新する。IPとポートはそれぞれに置き換えてください。ここではデフォルトのポート名でやってます。
git push ssh://user@xxx.xxx.xxx.xx:3843/home/user/repo/sample.git master

これで更新がサーバに飛んだので、ファイルを公開用フォルダにコピーする。
# cd /var/www/
# git clone /home/user/repo/sample.git

完了。

2011年5月30日月曜日

2011年5月16日月曜日

grouponからのメールを解析

grouponに登録していると毎日HTMLメールが送られてくるので、それを解析して、商品とそのURLだけを抜き出す。
メールをrubyに受け渡す方法は、昨日の記事参考。

require 'tmail'
require 'nokogiri'
class Mailget < ActionMailer::Base
def receive(email)
data = TMail::Mail.parse(email)
if data.from = 'no-reply@groupon.jp'
doc = Nokogiri::HTML( data.body )
doc.css('table').css('a').each do |f|
puts f.text
puts f.attribute('href').value
end
end
end
end
これだと同じURL二回でちゃうので、何かに利用する場合は、適度に加工してください。

やろうとしてたことがうまくいかなかったので、暇つぶし的に・・・

2011年5月15日日曜日

postfixで受信したメールをrailsで解析する

Actionmailerで解析できるはずなのだけど、うまくできなかったのでTmailで実現してみた。

まず対応するモデルを作成
ruby script/generate mailer Mailget

で、モデルを修正

require 'tmail'
require 'kconv'
class Mailget < ActionMailer::Base
 def receive(email)
  entry = Entry.new
  mailadd = TMail::Mail.parse(email)
  entry.from = mailadd.from[0]
  entry.discription = mailadd.body.to_s.toutf8
  entry.save
 end
end

あとは、postfixで受信したメールを流してやる。
testアカウントできたメールを処理するように設定。

virtualの設定
# sudo vim /etc/postfix/virtual
下記を一番下に追記
test.example.com anything
test@test.example.com test

aliasesの設定
# sudo vim /etc/aliases

mailer-daemon: postmaster
postmaster: root
test: "| /usr/bin/ruby /var/www/mail/script/runner -e production 'Mailget.receive STDIN.read'" ※追記

これでpost@test.example.com宛にメールがきたら、解析して、DBに送信のメールアドレスと本文を日本語で入れる。
うまく処理されているかどうかをログで確認して終了
# vim /var/log/maillog

もしDBなどにうまく書き込めていなければ、パーミッションのエラーの可能性があるので、その時は
777などに変更してください。

serversmanにpostfixを導入

最初からsendmailが入っているみたけど、postfixにしたかったので、導入する。

まずはドメインの設定
mx mail.example.com 10
a mail.example.com xxx.xxx.xxx.xxx

サーバのホストネームを設定
# sudo vim /etc/sysconfig/network
→ HOSTNAME="example.com” ※追加


次にオレオレ証明書の導入
# sudo yum list mod_ssl
# cd /etc/pki/tls/certs
# make server.key ※パスワードを入力
apache再起動時に毎回パスワードを聞かれるようになるので、修正。下記を入力
# sudo openssl rsa -in server.key -out server.key
# sudo make server.csr ※Country Name と Common Name以外は空白でOK。個人的には全部空白でしてしまったけど。。。
# openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 3650
# openssl x509 -in server.pem -outform DER -out server.der
# sudo chmod 400 server.key
# sudo chmod 400 server.csr
# sudo chmod 400 server.pem
# sudo vim /etc/httpd/conf.d/ssl.conf
→ DocumentRoot "/var/www/html" ※コメントアウト
→ SSLCertificateFile /etc/pki/tls/certs/server.pem ※書き換え
→ SSLCertificateKeyFile /etc/pki/tls/certs/server.key ※書き換え
# sudo /etc/init.d/httpd restart

証明書を使えるようにする。
# yum install cyrus-sasl-md5 cyrus-sasl-plain

システムアカウントとの連携
# sudo vim /etc/sysconfig/saslauthd
→ MECH=shadow ※変更
# sudo /etc/init.d/saslauthd restart ※リブート
# sudo /sbin/chkconfig saslauthd on

次にpostfixの導入
# sudo yum remove sendmail
# sudo yum install postfix
# sudo vim /etc/postfix/main.cf
→ myhostname = mail.example.com ※追加
→ mydomain = temog.info ※追加
→ myorigin = $mydomain ※追加

→ inet_interfaces = all ※コメントアウト解除
→ #inet_interfaces = localhost ※コメントアウト

→ home_mailbox = Maildir/ ※コメントアウト解除

→ #mydestination = $myhostname, localhost.$mydomain, localhost ※コメントアウト
→ mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ※コメントアウト解除

→ smtpd_banner = $myhostname ESMTP MyMTA(0.1) ※追加

最終行に追加
----------------------------------
# smtp auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination

# 受信メールサイズ制限(10M)
message_size_limit = 10485760

# ssl setting
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.pem
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_schache
----------------------------------


設定ファイルの修正
# sudo vim /etc/postfix/master.cf
→ smtps inet n - n - - smtpd ※コメントアウト解除
→ -o smtpd_tls_wrappermode=yes ※コメントアウト解除
→ -o smtpd_sasl_auth_enable=yes ※コメントアウト解除

メールを保存する場所を作成
# cd
# mkdir -p Maildir/{new,cur,tmp}
# chmod -R 700 Maildir/

新規アカウントを作った場合に、自動的につくられるように
# sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# sudo chmod -R 700 /etc/skel/Maildir/


dovecotのインストール
# sudo yum -y install dovecot
# sudo vim /etc/dovecot.conf
→ protocols = imap imaps pop3 pop3s ※コメントアウト解除
→ mail_location = maildir:~/Maildir

設定の反映と起動
# sudo /etc/init.d/dovecot restart
# sudo /sbin/chkconfig dovecot on

2011年5月9日月曜日

下位タグの考え方

次のサービスで使う予定なので、思いつきをメモ。

すでにあるのかもしれないけど、タグとディレクトリの間として、「下位タグ」の考え方を使いたい。

例えば「A」というタグがあって、その下位タグとして「A-1」や「A-2」があるという考え方。
「A-1」や「A-2」は「A」に従属していて、「A」は「A-1」「A-2」を包括している。
「A」が部署名で、「A-1」は個人名みたいな感じで使う。


まあたいしたことには使えなさそうだけど、個人的なメモとして。