【Rails】【Capistrano】SCMを使わずにデプロイする方法
はじめに
Webサービスを開発していて、かなりハマったのでメモをする。
環境
- OS X El capitan
- Ruby 2.3.0
- Ruby on Rails 4.2.7
- Capistrano 3.4.0
前提条件
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
アクセスできないのであれば、アクセスできるところで
ファイルを取得して、それをまるっと持っていけばいいという方法です。
以下のものを使えばいけるようです。
ただし、メインの場所は開発がストップしており
フォークされたものが有志でメンテナンスしているみたいです。
余談ですが、以下のやつも同じようなことができるようです。
その2
別のものを使っても、同じようなことができます。
※Capistrano2では、もともとあった機能のようです。
使い方はQiitaの記事を見れば、簡単に実装できます。
まとめ
便利なものがすでに用意されており、今回ローカルマシンでというのが
メインでしたが、CIサーバで同じことをすれば問題なく動くと思います。
標準的な動作でやれることに越したことはないですが
別の方法を知っておくことで、想定外のことを想定内にしておくことって
とても大切だと思わされた内容でした。