gemを使ったRailsアプリの運用

6 views
Skip to first unread message

さとうようぞう

unread,
Aug 2, 2008, 4:37:07 AM8/2/08
to rbc-incubator
お世話になります。さとうようぞうです。

gemで配布されているプラグインを使ったアプリを公開&運用している場合、
そのプラグインが更新された時って皆さんどうされてますか?

現状、本番サーバーが1台しかないのであまり困ってないんですが
将来的にアプリサーバーは10台前後まで増やす事を計画しています。
そうするとプラグインの更新の度に
sudo gem update plugin
ってのをそれぞれのサーバーで10回叩かなきゃいけない気がして
非合理的かなぁ、と。。

Railsアプリを運用されている方の実例やご意見をお聞かせいただけると幸いです。

以上、よろしくお願い致します。

akm2000

unread,
Aug 3, 2008, 10:45:52 AM8/3/08
to rbc-incubator
さとうようぞうさん

秋間です。

正直アプリサーバーを何台も並列で動かすことをやってないので、
ちゃんとしたお答えができないのですが、Puppetを使うと、
マニフェストっていうのを書いて、ごにょごにょすると、自動で
できそうな気がします。けっこう大げさな感じになりますが。
http://reductivelabs.com/trac/puppet

僕は全く詳しくないので、説明はこちらにお任せします。
http://gihyo.jp/admin/serial/01/puppet



僕個人としては、できるだけサーバーのデプロイ関係については
capistranoのスクリプトで済ませられるようにしています。
http://wiki.rubyonrails.org/rails/pages/Capistrano
http://www.ffront.jp/diary/21

いままでgemのupdateを必要とするアプリのデプロイをやっていない
ので、具体的なことが言えなくて申し訳ないですけど、
多分deploy.rbの適切なタスク(すいません、すぐ出てこないっす。
たしか、シンボリックリンクを切り替える前とかそんな感じ)で
rubyのsystem("gem update xxx")とか、`gem update xxx`やれば
できそうな感じがします。
# 必要なディレクトリを作ったりするのはdepuloy.rbでやったことがあります。

これならデプロイ時にcap deployをサーバー台数分やればOKです。
deploy.rbを書くのがちょっと面倒ですけど。
# あ、僕が使ってたのはcapistrano-1.3の頃でした。
# 今は2.4だそうで、けっこう変わっているようです。


それから、間違いを防ぐために config/environment.rbに
gem "gettext" , "=1.90.0"
というような記述を入れておくのも重要かもしれません。


ついでにgem以外についても書いておくと、開発時には
ruby script/plugin install xxxxx -x
でsvn:externalsを設定して、プラグインの更新を自動的に反映させた方が
いいプラグイン(開発途中のプラグインとか、プロジェクトで共通に
使うプラグインとか)もありますが、リリース時にはsvn:externalsは
外してプラグインごと、あるいはrailsのバージョン違いもあり得るので
rake rails:freeze:gems
をやった上で、vendor以下を全部リリースブランチに含めた方がいいかも
しれません。
# 当たり前かもしれませんが、僕たまに忘れるんで。笑。


記憶があやふやであまりお役に立たないかもしれませんが、
ご参考になれば幸いです。

SATO Yozo

unread,
Aug 9, 2008, 3:33:17 AM8/9/08
to rbc-in...@googlegroups.com
あきまさん

さとうです。素早いご回答、感謝です。
ちょこっと調べてみましたが、Puppetを使うとなると
アプリサーバーを最初から複数台並べておかないと逆に工数だけか
さみそうですね・・。
今の所「目指せ100万ユーザー!」なんて息巻いてますが、フ
タをあけてみれば100人かよ!
みたいなことになると(すでになってるし(爆))採算が全然合わ
ない・・・。

> ついでにgem以外についても書いておくと、開発時には
> ruby script/plugin install xxxxx -x
> でsvn:externalsを設定して、プラグインの更新を自動的に
> 反映させた方が

> (略)
> をやった上で、vendor以下を全部リリースブランチに含め
> た方がいいかも
> しれません。

現状の要件だとこれがいちばん手数が少なくて、かつミスが起こり
難いような気がしますので
当面は上記の方法でやってみたいと思います。
何かしら成果が出たらMLとかに共有します。

--
SATO Yozo
yoozo...@gmail.com

Reply all
Reply to author
Forward
0 new messages