【Rails】【Capistrano】SCMを使わずにデプロイする方法

はじめに

Webサービスを開発していて、かなりハマったのでメモをする。

環境

前提条件

Vagrantなどでローカル環境でSCMからソースを取得して、
デプロイできる環境となっていること。
または、SCMからソースを取得しないで、ローカルにあるファイルを
デプロイしたい場合。

詳細

通常のCapistranoは、「cap staging deploy」を実行した場合 以下の記述に沿って、デプロイしたいサーバーでSCMからソースを
pullしてからデプロイを実行します。

# config/deploy.rb
set :repo_url, 'git@github.com:[User Name]/[Repository Name].git'
set :scm, :git

ただし、サーバーからSCMにアクセスできない場合があります。
※セキュリティ的な理由だったりする。

これは自分にとってかなり困った状態となった。
Capistrano標準だと何も考えずやればよかったが、デプロイ方法を
考えなおさなければなりませんでした。

そして、1日考えたあげく解決方法として2つ見つかりました。

解決策:Capistranoコマンドを実行した箇所からファイルをコピー

その1

アクセスできないのであれば、アクセスできるところで
ファイルを取得して、それをまるっと持っていけばいいという方法です。

以下のものを使えばいけるようです。

github.com

ただし、メインの場所は開発がストップしており
フォークされたものが有志でメンテナンスしているみたいです。

github.com

余談ですが、以下のやつも同じようなことができるようです。

github.com

その2

別のものを使っても、同じようなことができます。
※Capistrano2では、もともとあった機能のようです。

github.com

使い方はQiitaの記事を見れば、簡単に実装できます。

qiita.com

まとめ

便利なものがすでに用意されており、今回ローカルマシンでというのが
メインでしたが、CIサーバで同じことをすれば問題なく動くと思います。

標準的な動作でやれることに越したことはないですが
別の方法を知っておくことで、想定外のことを想定内にしておくことって
とても大切だと思わされた内容でした。