Capistrano3でassets:precompileが通らなかった話

考えたら久々の投稿かもしれない。

ふとデプロイツールに興味を持ったので、
Capistrano3を触ってみてます。

cap production deployを実行した際に、assets:precompileが動作していなかったのでその時のメモ。

最初production.rbの中身はこうでした。

set :stage, :production
set :bundle_path, -> { shared_path.join('./vendor/bundle') }
server 'localhost', user: 'rails', roles: %{app web db}

これだとなぜかassets:precompileが動作しない。

ググってたから下記の記事を発見。
capistrano3でproduction環境にdeployしたらassets precompileが走らなかった件 - syaka-syakaブログ
どうやらwebでしか動作しないようだ。
実際にソースを追ってみると、確かに97行目で決め打ちされている。

set :assets_roles, [:web]

じゃあproduction.rbの中身はこれならいけるだろうとroleの順番を変更したが、動作しなかった。

set :stage, :production
set :bundle_path, -> { shared_path.join('./vendor/bundle') }
server 'localhost', user: 'rails', roles: %{web app db}

しばらく考えて

set :stage, :production
set :bundle_path, -> { shared_path.join('./vendor/bundle') }
server 'localhost', user: 'rails', roles: %{web}
server 'localhost', user: 'rails', roles: %{app db}

webとapp,dbを分けて記述することに。
こうやれば動いた。ああ、ちゃんと分けて書かないとダメなのか…
と、半日くらいハマっておりました。

全体の設定ファイルを置いておきます。

次は、ridgepoleを実行させてみたり、unicornとの連携をやってみようと思います。
おしま。

参考にしたサイト