コミケのサークルスペースを検索するWebアプリを制作していて、仕上げにCapistranoでデプロイ!と思ったら、タイトルのとおり壁にぶち当たりました。
画像リソースをGit LFSに投げていて、リモートにインストールされていなかったことが原因です。
問題点
-
$ bundle exec cap production deploy
する - ベアリポジトリがクローンされる
- (リモートにGit LFSがインストールされていないので)フックが走らない
- Git LFSに投げていた画像もろもろが表示できない
試みたこと
ローカルでアセットをプリコンパイルして投げようとしたら、rsyncがToo many levels of symbolic links
を吐いて無事死亡しました(なんで)
Git LFSを入れずに素のままでやってみたかったのですが、「capistrano git lfs」でgoogle先生に聞いてもまず検索結果が2000件くらいでそれっぽい資料も見つからずじまい。「未指定: capistrano」ばかりの検索結果に諦めようとしていました。
解決策
capistrano-withrsyncを使いましょう。
capistrano-withrsync
をGemfileに追加してCapfile
でrequireしたところ、しっかりファイルを持ってきてくれました。
このGemはもともとCapistrano上でrsyncを用いてgitリポジトリを送り込むものですが、ローカルでのクローン時点でフェッチしたGit LFSのオブジェクトを流れでリモートにコピーしてくれます。
リソースが多くある場合はこうやって配信する形の方が良いのかな…?
Git LFSをインストールしているマシンでデプロイするコマンドを叩けば、いつも通り簡単にデプロイしてくれそうです。
せんでん
Circlesearchでは、各種同人イベントの参加サークルをTwitterから一覧にしています。参戦予定のイベントがあればぜひ使ってみてください。