ひげろぐ

技術者として仕事人としての思うところや覚え書きやらです
Home      Profile      Works     
2009-03-29

『Railsデプロイ』は良い本

読んだ。

Railsを本番環境で運用していく方法についてかなり丁寧に書いてある。
単にこうすればうまくいくというだけではなく、なぜそうなるのか、そうしなかったらどうなるのかというところまで掘り下げて書かれている。
しかも読みやすい。さくさく読める。
これはかなりいい本だ。

原書は出た時期がちょっと昔なので情報がちょっと古い面もある。
対象とするRailsのバージョンが2.0.2であったりPassengerに関する言及がなかったり。
けれども全般的に今でも通じるしこれからも通じるだろうということがたくさん書かれている。
決して陳腐化していない。

序盤の章は、運用環境でアプリをちゃんと動かすための諸々の準備やマイグレーションの解説、運用環境にするホストの選び方と設定方法などに割かれている。
このあたりはそれなりに経験を積んだ人なら飛ばしてもいいような内容。
だがたしかに悩んだ覚えのあることがつぶさに書かれている。
これらの章はRails初心者にはかなり得るところが多いだろう。
経験者もざっと目を通してみるとふたつみっつためになることがあるかもしれない。

序盤以降のCapistranoやスケールアウト、パフォーマンスに関する章は初心者でないRails開発者にも興味深いはず。
特にパフォーマンスチューニングの具体的な方法やよくあるボトルネック、キャッシュは実は難しいといったところの内容は面白かった。

Mongrelの章はもうMongrel使ってないからスルーでいいやと思いきや、番犬(Moint)の設定やエラーの通知など面白いトピックがあった。
油断がならない。
Windows環境で運用する手順なんかもまとまっている。
この章は今のところほんとにパラパラとしかめくってないけれど、そのうち読んでみるつもり。

こいつは必読書だと思う。

Railsデプロイ
Railsデプロイ
posted with amazlet at 09.03.29
Ezra Zygmuntowicz Bruce A. Tate Clinton Begin
オライリージャパン
売り上げランキング: 9887

# ところでデプロイって言葉はもう普通に使っても通じるのかな?

2009-03-27

複数MySQLのセットアップ備忘メモ

CentOSにてパッケージインストールのMySQLを元に。
割とやっつけ。

手順は以下の通り。

  • /etc/my2.cnfを準備
  • データディレクトリの準備
  • 起動スクリプトのコピーと編集
  • 自動起動の設定

/etc/my2.cnfを準備

テキトーに。
以下の項目は起動スクリプトで使われるので必須。

  • datadir
  • socket
  • log-error
  • pid-file

あとportとかもかぶらないように。

データディレクトリの準備

テキトーに。

起動スクリプトのコピーと編集

$ sudo cp /etc/init.d/mysqld /etc/init.d/mysqld_2
$ sudo vi /etc/init.d/mysqld_2

やっつけ感ただようファイル名。

ヘッダ行とかの書き換え

mysqlをmysql_2にするとかてけとうに。

# mysqld_2      This shell script takes care of starting and stopping
#               the MySQL subsystem (mysqld).
#
# chkconfig: - 64 36# description:  MySQL database server.
# processname: mysqld_2
# config: /etc/my2.cnf
# pidfile: /var/run/mysqld/mysqld_2.pid

prog="MySQL_2"
get_mysql_option関数の変更

my_print_defaultsコマンドに与える引数に設定ファイルを指定するオプションを追加する。

result=`/usr/bin/my_print_defaults -c /etc/my2.cnf "$1" | sed -n "s/^--$2=//p" | tail -n 1`
mysqld_safeの実行行

オプションは全部設定ファイルで与えることにして、他のオプションは全部削除。

/usr/bin/mysqld_safe --defaults-file=/etc/my2.cnf >/dev/null 2>&1 &

ここまでやると以下のようにして起動できるようになる。

$ sudo /etc/init.d/mysqld_2 start

psコマンドなどできちんと起動しているかどうか確認できればオッケー。

自動起動設定

仕上げ

$ sudo /sbin/chkconfig --add mysqld_2
$ sudo /sbin/chkconfig mysqld_2 on
2009-03-23

CentOSにyumのインストール

普通は最初から入っているものだけれど、レンタルサーバなどでは入ってないこともあるので入れる手順をメモ。
yumを入れてパッケージの自動アップデートを有効にするまで。

yumのインストール

まずバージョン確認。

$ cat /etc/redhat-release

CentOS 5.2だったのでそれにあったパッケージをriken.jpとかから落とす。

$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/yum-3.2.8-9.el5.centos.1.noarch.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/yum-metadata-parser-1.1.2-2.el5.x86_64.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/python-elementtree-1.2.6-5.x86_64.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/python-urlgrabber-3.1.0-2.noarch.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/python-sqlite-1.1.7-1.2.1.x86_64.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/m2crypto-0.16-6.el5.2.x86_64.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/rpm-python-4.4.2-48.el5.x86_64.rpm
$ wget ftp://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm
$ sudo rpm -ivh *

yum-3.2.8-9.el5.centos.1.noarch.rpmを単体で入れようとすると何が足りないか教えてくれるので、表示されたパッケージを全部持ってきて入れたらよい。

これでインストール完了。
ついでによさげなミラーから落としてきてくれるように以下のパッケージも入れておく。

$ sudo yum -y install yum-fastestmirror

自動アップデートの設定

yumによるパッケージ自動アップデートの手段としてyum-updatesdやyum-cronがあるが、シンプルなyum-cronをチョイス。
yum-updatesdは常駐型なのでその分リソースを食うが、yum-cronはcronでyumを叩くだけなので特別なリソースを必要としない。

$ sudo yum -y install yum-cron
$ sudo /etc/init.d/yum-cron start
$ sudo /sbin/chkconfig yum-cron on

startするってことはこっちも常駐するdaemonなんじゃないの?という気がするが、cronでyumを動かすかどうかを判断するためのロックファイルを作ってるだけなのでdaemonではない。

yum-cronの設定ファイル

/etc/sysconfig/yum-cronを編集することで自動アップデートの動作を変えることができる。

 # Don't install, just check (valid: yes|no)
CHECK_ONLY=no
# Don't install, just check and download (valid: yes|no)
# Implies CHECK_ONLY=yes (gotta check first to see what to download)
DOWNLOAD_ONLY=no

デフォルトではアップデートされたパッケージのチェック、ダウンロード、インストールまでを行うようになっている。
CHECK_ONLY=yesにすればチェックのみ、DOWNLOAD_ONLY=yesにすればチェックしてダウンロードするのみ。
自動でアップデートをインストールして欲しくない場合はこの設定ファイルをいじればよい。

参考
2009-03-09

ActiveRecordで任意のidを持つレコードを追加する

各レコードのidの決まっているマスタを作るときなどに知っていると便利な小技。
普通ActiveRecordのidは自動で採番され、レコード作成時に指定することも後で変更することもできない。

例えば最後のレコードのidが100の時に

maker = Maker.create(:id => 1000)

などとしても

maker.id
#=> 101

といった結果になる。

しかしfind_or_create_by_idを使うとidを指定してレコードを作成できる。

maker = Maker.find_or_create_by_id(1000)

とすると

maker.id
#=> 1000

イレギュラーな挙動かもしれないけれど、今のところはこのように動く。

ちなみに更新はやっぱりできないので後からidを変えたくなった場合はexecute_sqlなどで強引に変えるしかないっぽいです。

2009-03-06

SpotlightとQuicksilver ランチャーとしての比較

WindowsでのbluewindのようなランチャーとしてMacではしばらくSpotlightを使っていた。
けれども最近は以下の理由からQuicksilverを使っている。

  • Quicksilverの方が速い Spotlightは候補表示が若干もたつく
  • ショートカットキーで直接ファイルやウェブサイトを開けて便利

Spotlightにはデフォルトで入っているという強みがあるので、上記の点が気にならない人はSpotlightでも十分だろう。
一方でQuicksilverもランチャーとして使い始めるだけなら導入は簡単なので敷居は高くない。

単純にランチャーとして使うだけだとしても、頻度の高い作業はちょっとでも快適にしたいのでQuicksilverがオススメかなあ。

2009-03-05

Outdooritem.net モバイル版作ってみた

先日紹介した本を見つつ作ってみた。
とりあえず閲覧のみのかなりシンプルなやつだけど。
趣味の知り合いなんかだと携帯でしかネットしない人もけっこう多いので、そういう人たちにも使ってもらえるようにと。

Outdooritem.net モバイル版

実機は手持ちのauでしか確認してないので、何かあれば教えてもらえるとこれ幸い。
(キャリアが公開してるシミュレータとかうんこで使えないですな・・・)

参考

copyright brass.to | powered by WordPress ME