40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

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