Coda2のRuby.modeを修正しました。
Coda2のデフォルトのRuby.modeだと末尾が?で終わるメソッド名をナビゲータで拾ってくれないという問題があったので、Ruby.modeを修正しました。
修正したものはhttps://github.com/dribble13/Ruby.modeに晒していますので、ぜひご利用ください。
unicornサービス起動スクリプト
Redmineをnginx+unicornで運用し始めたのですが、サーバにrbenvをインストールしているという事情もあってこちら(http://mhalligan.com/fixing-unicorns-init-script)を参考に起動スクリプトを作成しました。
作成した起動スクリプトは下記になります。
unicorn起動スクリプトのサンプルは、開発元よりこちら(https://github.com/defunkt/unicorn/blob/master/examples/init.sh)で公開されています。
ブログのバックアップにDropboxを使ってみる
このブログはさくらインターネットさんのVPSサービスを利用して運営されているのですが、ファーストサーバさんのような大規模な障害が発生したり、気が狂って間違って
sudo rm -fr /*
などというコマンドを実行してしまったり、どこぞのクラッカー集団に襲われたりと、まぁ色々とサーバ上のデータを失ってしまうというリスクはつきものです。
そこで大切なデータを失う前にバックアップを自動的に取るようにしましょう、というお話です。
今回のポイントですが、バックアップ先にクラウドストレージサービスであれDropboxを使用する、というところがポイントです。
DropboxをUbuntu 12.04で利用する方法は下記を参考にしました。
- DropboxをLinuxで利用する方法
- http://dropboxwiki.com/Gentoo_Startup
- blog.chira-ura.info » Gentoo: DropboxをCLIで利用するメモ
さて、バックアップデータ採取元のVPSサーバですが、GnomeやKDEといったGUI周りのサービスは入っていません。それに毎日毎日sshでログインして特定のコマンドを流す、というのも面倒なので避けたいところです。というか、絶対に3日で忘れます。忘れるというか面倒くさくなってやらなくなります。
じゃ、どうするのということですが、バックアップを代わりにやってくれるシェルスクリプトを作成してこれをcronで1日1回決まった時間に実行するようにします。
まず、シェルスクリプトはこんな感じです。
上記シェルでは大きく分けて下記3つのバックアップを取っています。
バックアップ先にはDropboxと同期しているディレクトリ内にバックアップ専用ディレクトリを設けてその中にバックアップを取るようにしています。
シェルスクリプトが用意できたらcronの設定を行います。
0 3 * * * /hoge/fuga/bachup.sh
上記設定では毎日午前3時にバックアップスクリプトが実行されるようになっています。この辺りは時間別のアクセス数や他のcronの設定などの兼ね合いで決めてください。
最後にサーバ側のDropboxの設定です。 まずはDropboxのダウンロードサイトからdropbox.pyをサーバへダウンロードします。
ダウンロードができたら、dropbox.pyに実行権を付けて
$ dropbox.py start -i
とするとDropboxの同期を行うデーモンがインストールされます。
デーモンのインストールが終わったら
$ dropbox.py start
とコマンドを実行すると、DropboxのURLが表示されるので、ブラウザで表示されたURLにアクセスし、Dropboxのアカウントの登録 or 作成を行います。
Dropboxのアカウント作成 or 登録が完了した時点からホームディレクトリ内のDropboxディレクトリにあるファイルがDropboxと動機されます。
今回のようにDropboxをバックアップデータの退避先として利用する場合、sshなどでログインしていなくてもdropboxの同期デーモンが実行されていないとマズイのでこちらを参考にスタートアップスクリプトを作成し、サーバ起動時に自動的にdropboxの同期デーモンも起動するようにしておきましょう。
また、デフォルトの設定ですとDropboxのデーモンがLan syncという機能がONになっており、udp 17500でブロードキャストしているので下記コマンドでLan sync機能をOFFにしておきましょう。
$ dropbox.py lansync n $ dropbox.py stop $ dropbox/py start
後は、cronでバックアップスクリプトが実行される度にバックアップファイルが作成され、Dropboxの同期デーモンが自動的にDropboxにアップしてくれます。
これで少しは安心ですね。
Ruby on Rails 3.2.xでAmazon SESを使ってメールを送信する
Amazon EC2のインスタンス上で何かしらアプリを動かしていて、メールを送信したいって場合はEC2のインスタンス上で何とかすることも出来なくはないようですが、結構大変なので素直にAmazon SESというメール送信サービスを使いましょうというお話です。
Amazon EC2と同じくAWS上のサービスですので、AWSのアカウントが必要です。また迷惑メール配信防止のため、送信元アドレスの存在チェックなど諸々の手続きが必要ですが、その辺はAWSのヘルプを見てください。
で、ようやく本題のRails 3.2.xでAmazon SESを使ってメールを送信する方法ですが、aws-ses という便利なパッケージがありますので今回はこれを利用しましょう。
まずはGemfileに下記を追加してbundle installします。
gem "aws-ses"
インストールに成功したら、config/initializers/amazon_ses.rb を作成してActionMailerでのメール配信方法にAmazon SESでのメール配信を追加します。:access_key_idと:secret_access_keyにはAWSのアクセスキーを設定します。
require 'aws/ses' ActionMailer::Base.add_delivery_method :ses, AWS::SES::Base, :access_key_id => 'access_key_id', :secret_access_key => 'secret_access_key'
後は、config/environment/*.rbに
config.action_mailer.delivery_method = :ses
と追加すればActionMailerでメール送信ができます。