GoogleAppsを使っている自ドメインのrailsアプリでActionMailerを使い、gmailのsmtpサーバ経由でメール送信することが出来た。

http://douglasfshearer.com/blog/gmail-smtp-with-ruby-on-rails-and-actionmailer

このやり方で出来ました。
このやり方だとruby1.8には無く、ruby1.9に入っているtlsの部分がpluginとしてきちんと切り出されているし、わかりよいと思います。

./script/plugin install http://svn.douglasfshearer.com/rails/plugins/action_mailer_optional_tls
した後に、config/environment.rbに追記するのですが、こんな風に書きました。

送信者を自分のドメインのメールアカウントにする場合


Rails::Initializer.run do |config|
config.action_mailer.smtp_settings = {
:tls => true,
:address => "smtp.gmail.com",
:port => "587",
:domain => "mydomain.com",
:authentication => :plain,
:user_name => "xxx@mydomain.com", <-GoogleAppsで使ってるドメイン
:password => "xxxxx"
}
(以下略

送信者を普段使っているgmaiアカウントにする場合


:user_name => "xxx", <-.gmailアカウントの@より前の部分
:password => "xxxxx"

#実際にはまずgmailアカウントでやって疎通確認できてから、自ドメインでやりました。

ユーザ登録、削除だけを行うアプリを作る。

  1. サイトを訪れたひとが自分のアカウントを作成できる。

とにかくすぐに使えるようにしたい。
そのための工夫(?)として、フローを以下のようにしてみるつもり。

ログイン名:アルファベットや数字の文字列
パスワード(そのうち別の認証のサポートするかもしれないけど)
確認用パスワード(<-本当に必要なのか?)
ユーザ名:表示用
メールアドレス:なにかと連絡用。パスワード忘れ時に送る用。メールアカウントへの認証を本人確認のよりどころにする。

登録後はそのまま使える。
ユーザにメールを送るが、それはメールアドレスのverify用であって、アカウントverifyではない。


これだけをひとまずやってみる。

sudo ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
sudo ruby script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/

一足遅く
./script/plugin discover

./script/generate authenticated user sessions --include-activation --stateful

詳細はこちらを
http://terrazilog.quipu.jp/?eid=585865

閑話休題textmateを入れた
http://hisasann.com/housetect/2008/05/railstextmate.html

google appsの設定

googleappsニフティDNSホスティングの組み合わせることで、
自分のドメイン

  1. メール(gmailと同等)。メーリングリストも。
  2. カレンダー(google カレンダーと同等)
  3. あと、いろいろ

が使えるようになりました。

GoogleAppsのStandardEditionだと他サイトとのシングルサインオンが出来ないのですが、プレミア(有料)もしくはパートナーエディション(申し込みが必要。無料と有料の2種類がある)に移行することで、その辺も連携できるようになります。


ハマった箇所:ニフティDNSホスティングGoogleメールサーバのMXレコードを登録する時。

ホスト名の欄には「@」<--これが最初わからなくて困った。
レコードタイプ「MX」
ValueにはGoogleの説明ページに書いてるサーバ名
優先順位も同じく説明ページに書いてある値


あとはRailsアプリを整えていく際に、メールサーバの用意だとか運用だとか容量の心配事が殆どなく進めていけるんじゃないかと思います。

google apps(?)の設定

メールサーバの運営はしんどいので、googleappsのstandard editionを利用する。

http://www.google.com/a/help/intl/ja/admins/editions.html
ドメイン保有者であることの確認には、CNAMEの追加か、指定されたhtmlファイルをそのドメインにuploadすることが必要です。
ニフティDNSホスティングサービスならCNAMEの追加なども出来るのですが、一応20レコードを超えるとお金が発生するので節約しておこうかとおもい、、htmlファイルのuploadでやりました。

ec2onrailsでデプロイしたそのままの状況だと、/var/www/以下は見に行かず全部ralsilsアプリ配下のpublic/を見てるので、そちらに指定のhtmlファイルを置きました。
すぐに確認が通り、google appsが使える状況になりました。

ドメイン設定

ニフティが始めたDNSホスティングを使いました。(1000円/月。20レコード。)
ドメイン自体は以前にムームードメインで取得したものを使いました。
http://domain.nifty.com/domain/qa_dns.htm

5分くらいで完了。作業自体は

  1. p3* ニフティ側の画面で、Aレコードの追加。
  2. p4* ムームードメイン側の画面で、ニフティDNSサーバをDNSサーバとして登録。

登録完了後、すぐにドメイン名でのアクセスで先ほどの仮Railsアプリが閲覧できました。
# 反映にかかる時間はケースバイケースなのですが、今回はすぐでした。

注意:ニフティの方は無料のアカウント作成後にクレジットカードの登録をしないとDNSホスティングの申し込み画面に行けないです。

githubに置いたソースをec2onrailsを使ってdeployする。

〜再掲〜

macbook:~/apps/bookshelf code$ cap deploy:cold
* executing `deploy:cold'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
Enter passphrase for key '/Users/code/.ssh/id_rsa':
* executing "git clone -q git@github.com:susatadahiro/bookshelf.git /mnt/app/releases/20081111111111 && cd /mnt/app/releases/200811111111111 && git checkout -q -b deploy poisdfklasjdfalksjdfaoisdjfasdf && (echo asdfasdfasdfasdfasdf > /mnt/app/releases/20081111111111/REVISION)"
servers: ["ec2-11-111-11-111.compute-1.amazonaws.com"]
[ec2-11-111-11-111.compute-1.amazonaws.com] executing command
** [ec2-11-111-11-111.compute-1.amazonaws.com :: err] Host key verification failed.
** [ec2-11-111-11-111.compute-1.amazonaws.com :: err] fatal: The remote end hung up unexpectedly
** [ec2-11-111-11-111.compute-1.amazonaws.com :: err] fetch-pack from 'git@github.com:susatadahiro/bookshelf.git' failed.
command finished

[deploy:update_code] rolling back

** [ec2-11-111-11-111.compute-1.amazonaws.com :: err] Host key verification failed.
Host Key....


現在までに出来てること
macbook --> github
macbook --> ec2
ここのソース送り込みは出来てる。今やろうとしているのは、github --> ec2のソース取得なのです。
githubはprivateリポジトリにしているのえ、で、アクセスするにはkeyとかが必要です。
現時点で既にやっているのは、

  1. macbookのpublickeyをgithubに登録。
  2. ec2のpublickeyをmacbookに登録。

あたりで、ec2 - github間は何もやってないはず。

〜ここから再開〜
あまり頭を使わないで考えると、
ec2->githubへのアクセスで認証NGになっているのだから、macbook->githubと同様に、ec2のpublickeyをgithubに登録すればいいのではないか?エラーメッセージもそれを意味してるように見える。

では、さっそくやってみよう。

だめだった。
替わりに別の方法で出来た。


http://groups.google.co.jp/group/capistrano/browse_thread/thread/9a0e2f67f705bdcc/dbc28187c3d4cb12?#dbc28187c3d4cb12


set :deploy_via, :copy

github->ec2
ではなく
macbook->ec2
ての経路でソースを送るやり方です。

cap deploy:coldはapachemongrelの起動も一気に行なうので、この段階で、仮railsアプリがブラウザで見ることができるようになりました。

#記念に、懸案だったトイレ掃除を半分だけやってみました。