やりたいこと
githubから取ってきたソースを圧縮してデプロイ先に転送する時に、javascriptをbuildした結果を一緒に送りたい。
前提
- 諸事情によりcapistrano2
- javascriptは
app/assets
以下ではなく、front
フォルダ以下で管理して、ES6で書いてる - 最終的には
app/assets
以下にbabelでビルドした結果を置いて、assets pipelineに載せたい(digestつけたい)
解決策
build_script
を使おう。
http://www.rubydoc.info/gems/capistrano/2.15.0/Capistrano/Deploy/Strategy/Copy
set :build_script, 'cp -r node_modulesのインストール先 node_modules && npm install && gulp build && cp -r node_modules node_modulesのインストール先'
build_script
は、ソースをgzして転送する前に取得したソースのルートディレクトリ上で任意のコマンドを実行できる。githubをリポジトリとして使っているのであれば、git clone
したものを圧縮する前にbuild_script
で指定した任意のスクリプトを走らせられるイメージ。
git clone
してきたものは/tmp
フォルダ以下に保存され、デプロイが終わるとディレクトリごと消される。つまり、npm install
すると0からインストールしなおすことになりいまいち。そこで、あらかじめ/tmp
以外の場所にデプロイ時に使うモジュールをインストールするディレクトリを用意しておき、build_script
内で都度コピーしてきている。
シンボリックリンクを使わない理由は、gulp build時のモジュールの依存解決ができずmodule not foundになるものがあったため。うまい方法がわからず、とりあえず実ファイルをコピーするようにした。
capistrano3では?
そもそもcapistranoがnpmに対応しているので、きっとこんなことやらんでも済むのかなー。
https://github.com/capistrano/npm/