@Konboi memo

主に技術に関してつらつらと。

taskの中で upload しようとしたらハマった。

はじめに

前回の記事からだいぶ時間が経ってしまった。 最近はもっぱら Rails でWebアプリをつくってます。

今日は capistrano でdeployしようとしてハマったことがあったのでメモっておきます。

構成

今回の構成は、ステージサーバーが1台, Webサーバーが2台で

ステージングサーバーからWebサーバー2台に capistrano で deploy するという形をとりました。 そして、各サーバーのconfigファイル( database,yml など ) は staging に置いておき 更新する度に

staging から web01, staging から web02

とそれぞれのwebサーバーへステージングサーバーからconfigファイルをコピーする形にしました。

f:id:Konboi:20121212133923p:plain

deploy.rb は下記の様な感じになっています。 ( 所々はっしょっています )

set :application, "appname"
set :user, "user_name"

...

set :deploy_to, "/home/hoge/app/#{application}"
role :web, "web01"
role :web, "web02"

namespace :deploy do
  task :start do ; end  
  task :stop do ; end
  task :default do    
    update
    upload_config
  end
  task :upload_config do
      upload "/home/staging/config-file/production/database.yml", "/home/hoge/apps/prod/current/config/database.yml", :via => :scp
      upload "/home/staging/config-file/production/settings.yml", "/home/hoge/apps/prod/current/config/settings.yml", :via => :scp    
     upload "/home/staging/config-file/production/sns.yml",  "/home/hoge/apps/prod/current/config/sns.yml", :via => :scp  end
  end

はじめは upload_config タスクのなかで

run "scp /home/staging/hoge.file #{host}:/home/hoge/"

のように scpコマンド をそれぞれを実行してが capistrano に upload というのが あったので、upload で行うようにした。

ハマった

が、 upload に書き換えたら下記のエラーが出てファイルがコピーできない

/home/homepage/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/capistrano-2.13.5/lib/capistrano/configuration/name
spaces.rb:110:in `block in define_task': wrong number of arguments (3 for 0) (ArgumentError)        from ./config/deploy.rb:41:in `block (2 levels) in load'

引数がおかしいというのでドキュメントを見てみたが特に問題も無さそう...

色々とためしてみると task の外で実行してみると問題なく動いているのがわかった。

解決方法

taskの中で upload をすると何か他の upload にメソッド を奪われてるっぽいので それで調べてみると 同じ境遇の人がいたどうやら helper の upload に task内で実行しようとしたuploadが奪われているっぽい。

書いてあるように upload の部分を

top.upload

と書きかえたら問題なく実行できた。

めでたしめでたし。

Railsデプロイ
Railsデプロイ
posted with amazlet at 12.12.12
Ezra Zygmuntowicz Bruce A. Tate Clinton Begin
オライリージャパン
売り上げランキング: 123184