capistranoでrailsじゃないものをdeployする
こんにちは,たにたにです.
Railsのデプロイツールとして有名なのがcapistranoですが,
TwitterのBotを更新するのにこれを使えないかと思って試行錯誤してみたので
忘れないうちにφ(..)メモメモ.
Botはユーザーストリームを取得してゴニョゴニョするので,ループをDaemonsでデーモン化する仕様にしていました.
Daemonsを使うと,ruby hoge.rb startとかruby hoge.rb stopという感じで
起動・停止できるので便利.
ただ,githubからpullして,sshでリモートログインして起動という作業をいちいち
やるのは面倒になので,どうにか一発でできないものかと思ってたどり着いたのが
capistranoでした.
capistranoをrailsアプリケーション以外で使うためのプラグインとして,
railsless-deployを使い,daemonsの起動・停止などを行うためのタスクをちょこっと追加しました.
各gemの使い方は別の記事を参考にしてね.
とりあえず,適当なプログラムを用意.目標は,これをリモート起動したりすること.
Daemons.run_proc('test',options) do loop do p "hello" sleep(1000) end end
capistranoとそのプラグイン系のものは全部gemでインストールします.
$ gem install capistrano $ gem install capistrano-ext $ gem install capistrano_colors $ gem install railsless-deploy
capistrano-extは環境別にデプロイでやることを変えられるようにするもの.
capistrano_colorsは実行結果をカラー表示にして見やすくしてくれるものです.
rvm-capistranoを使うとデプロイ時にRVM環境を構築することもできます.
capistranoを使うためには,capifyコマンドで初期化を行います.
$ cd /path/to/app/ $ capify . [skip] './Capfile' already exists [skip] './config/deploy.rb' already exists [done] capified!
Capfileとconfigディレクトリが生成されます.
“./config/deploy.rb"に共通の設定,"./config/deploy/#{環境名}.rb"に環境ごとの設定を書き込んでいきます.
# ./config/deploy.rb require 'capistrano/ext/multistage' require 'railsless-deploy' set :application, 'test application' set :default_stage, 'development' # デプロイ時にpullしてくるリポジトリの設定 set :repository, 'git@github.com:user/repo.git' set :scm, :git # sshでログインするユーザの設定 set :user, 'ssh_user' set :use_sudo, false default_run_options[:pty] = true
# ./config/deploy/development.rb # デプロイ先の設定 role :app, "domain.net" set :deploy_to, "/home/#{user}/workspace/test" # Daemonsの起動など namespace :daemons do desc "Daemons start" task :start, :roles => :app do run "cd #{current_path} && ruby test.rb start" end desc "Daemons stop" task :stop, :roles => :app do run "cd #{current_path} && ruby test.rb stop" end end after 'deploy:start', 'daemons:start' after 'deploy:stop', 'daemons:stop'
もっとスマートに書ける気がする...
設定が終わったらデプロイして実際に起動してみます.
$ cap deploy $ cap deploy:start
これで無事起動できていたらOK.
ディスカッション
コメント一覧
まだ、コメントがありません