さとうようぞうさん
秋間です。
正直アプリサーバーを何台も並列で動かすことをやってないので、
ちゃんとしたお答えができないのですが、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以下を全部リリースブランチに含めた方がいいかも
しれません。
# 当たり前かもしれませんが、僕たまに忘れるんで。笑。
記憶があやふやであまりお役に立たないかもしれませんが、
ご参考になれば幸いです。