TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

Capistranoでrubygemsのインストール管理する

いい加減サーバサイドのアプリケーション開発したいけど、後々の運用面のことや勉強も兼ねてもう少しCapistranoいじることにしました。

テスト環境であるVirtualBox上のDebianと、本番環境のさくらVPSのDebianにそれぞれ必要なRubyGemsインストールしようと思ったのですが、折角なのでこれをCapistranoから行おうと思って最初こんな感じのレシピを書いていました

task :gemlist do
  sudo "gem list"
end

実行すると

$ cap test_env gemlist
  * executing `test_env'
    triggering start callbacks for `gemlist'
  * executing `multistage:ensure'
  * executing `gemlist'
  * executing "sudo -p 'sudo password: ' gem list"
    servers: ["localhost"]
    [localhost] executing command
*** [err :: localhost] sudo
*** [err :: localhost] :
*** [err :: localhost] no tty present and no askpass program specified
*** [err :: localhost] 
    command finished in 222ms

という感じで怒られてしまいました。

Capistrano sudo”でググッていたらhttp://arika.org/2010/03/03/capistrano:title=を見つけたので

task :gemlist do
  sudo "gem list",:pty => true
end

と、,:pty => trueというオプションをつけることでコマンド実行時にsudoパスワードを要求されるのでとりあえずこれで実行できるようになりました

現時点のレシピはこんな感じになりました。

require "rubygems"
require "capistrano/ext/multistage"
set :application, "setup_gems"

task :gemlist do
  sudo "gem list",:pty => true
end

task :geminstall do
  sudo "gem install bundle json sinatra mongo mongoid ",:pty => true
end