LoginSignup
3
2

More than 5 years have passed since last update.

capistrano2で独自のビルドスクリプトを走らせる

Last updated at Posted at 2015-09-07

やりたいこと

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

deploy.rb
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/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2