2008年4月22日火曜日

Rails メール送信(2)

前回のメール送信の続きです。

ネットで拾ったサンプルコードに『波ダッシュ化け』の対応を追加しました。
元コードを変更したのでjp_mailer.rbというファイル名に変更してあります。

ファイル名:#{RAILS_ROOT}/lib/jp_mailer.rb
説明:メールのエンコード・デコード処理


require 'nkf'

class JpMailer < ActionMailer::Base
# MIME Encode
def self.mime_encode(str_utf8)
str_iso2022jp = NKF.nkf("-W -j -m0 --cp932'", str_utf8)
str_base64 = [str_iso2022jp].pack('m').chomp
"=?iso-2022-jp?B?#{str_base64}?="
end

# MIME Decode
def self.mime_decode(str_mime)
NKF.nkf('-J -m --utf8',str_mime)
end

# bodyをiso-2022-jpへ変換
def create!(*)
super
@mail.body = NKF.nkf("-W -j --cp932'", @mail.body)
return @mail
end
end


次に、Generatorを使ってモデル名・ビュー名をmailでMailerを生成しました。
以下のファイルが生成されます。
 create app/models/mail.rb
 create app/views/mail/mail.rhtml
 create test/fixtures/mail/mail
 create test/unit/mail_test.rb


それぞれのファイルの内容は以下の通りです。

ファイル名:#{RAILS_ROOT}app/views/mail/mail.rhtml
概要説明:送信メールのテンプレートです。下記のモデル内メソッド名def mail()と同名で作成します。

---------------------------------
受付時刻: <%= @now %>
件  名: <%= @subject %>
---------------------------------
テストメール送信です。


ファイル名:#{RAILS_ROOT}/app/models/mail.rb
概要説明:メール送信に関する情報を設定しています。
継承元ActionMailer::BaseJpMailerに変更します。

class Mail < JpMailer
def mail()
recipients "(TOメールアドレス)"
from "#{JpMailer.mime_encode('FROM送信者です')}<(Fromメールアドレス)>"
subject JpMailer.mime_encode("テストメ~ルです。")
body :now=>Time.now, :subject=>subject
end
end


最後に呼び出し方法ですが、コントローラーなどでメールを送信するタイミングで以下のメソッドをコールします。
Mail.deliver_mail()

2008年4月17日木曜日

NetBeansでのBackgrounDRbの使用手順

早速、BackgrounDRbを使用してみました。
使用手順は以下の通りです。

  1. NetBeansIDEを終了、もしくはプロジェクトを閉じます。
  2. http://svn.devjavu.com/backgroundrb/ からプラグイン(0.2.1)をダウンロードします。(最新版は、1.0.1ですが、Rails2.0対応のようです。さらに現バージョンではWindowsサーバー上では起動しないようです。)
  3. #{RAILS_ROOT}\vendor\plugins に、ダウンロードしたプラグインbackgroundrb をコピーします。
  4. NetBeansIDEを起動、もしくはプロジェクトを開きます。
  5. プロジェクトを右クリックで「Rakeタスクの実行」ー「一覧の再表示」を選択します。
  6. Rakeタスクの実行」メニューに「backgroundrb 」が増えていますので、「setup」を選択します。
  7. backgroundrb の設定は、#{RAILS_ROOT}\config\environments\backgroundrb.yml を変更します。
  8. 生成」ー「Worker」でモデル名を指定して、Workerモデルを作成する。

※BackgrounDRb Version 1.0.1の設定方法は、HDEラボさんのところで分かりやすく説明してありました。

一定周期で処理を実行

Rails環境のみ(cronなどを使用しない)で周期的に処理を実行したい。

ざっと調べた感じでは、実装したい内容により次の2つを使い分ければよい感じです。

periodically_call_remote/Ajaxヘルパー
 Ajaxを使って周期的にメソッドを実行するようです。

BackgrounDRb/Railsプラグイン
 リクエストとは別のスレッドで処理を行なうプラグインのようです。

この2つに関しては、引き続き調査したいと思います。

NetBeansのコンソール出力文字化け解消

Windwos版NetBeansではコンソール出力が文字化けします。(Ver.6.1 RC1現在)

以下の設定で文字化けが解消します。
--------------------------------------------------------------------------------------
\(NetBeansインストールフォルダ)\etc\netbeans.conf を開き、
netbeans_default_options=-J-Dfile.encoding=UTF-8
を追加します。
--------------------------------------------------------------------------------------
保存してNetBeansIDEを起動すると設定が有効になります。

2008年4月10日木曜日

RailsでセッションデータをファイルではなくDBに保存する

通常セッションデータは、サーバーにファイルで保存されます。
以下の設定を変更する事でDBに保存することが出来ます。

ファイル:environment.rb
ファイル内から次の行を探し、コメントを外します。
#config.action_controller.session_store = :active_record_store

次に、rake db:sessions:createを実行します。
正常にrakeが完了すると次のファイルが作成されます。

ファイル:db/migrate/009_add_sessions.rb
(セッションデータ保存テーブル)

あとは、データーベースマイグレーションで現在のバージョンにする事でDBにセッションデータが保存されるようになります。

environment.rbを更新していますので、サーバーが起動中であれば設定を有効にする為に再起動します。

2008年4月9日水曜日

Rails メール送信(1)

Railsでメールを送信するには、以下の設定が必要なようです。

ファイル:environment.rb
の最後に以下の内容を記述します。



ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.default_charset = "iso-2022-jp"
 
ActionMailer::Base.smtp_settings = {
:address => "<サーバーアドレス>",
:port => 25,
:domain => "<ドメイン名>",
:authentication => :login,
:user_name => "<ユーザー名>",
:password => "<パスワード>"
}


※備考
ActionMailer::Base.delivery_method = (:smtp or :sendmail or :test)
 :smpt smtpを使ってをメール送信する(ActionMailer::Base.smtp_settingsが必要)
 :sendmail sendmailを使ってをメール送信する
 :test test用で実際には送信しない

ActionMailer::Base.perform_deliveries = (true or false)
 true メールを送信する
 false メールを送信しない

ActionMailer::Base.raise_delivery_errors = (true or false)
 true メール送信エラー発生時に例外を発生する
 false メール送信エラー発生時に例外を発生しない

ActionMailer::Base.default_charset = ("utf-8" or "iso-2022-jp" or etc.)
 メールで使用するキャラクタセット