マストドン v1.4の悲劇 (CentOS7+非Docker)
流行ってんだか流行ってないんだかよくわからないマストドン。
思うところあってインスタンスを立てようとしたらハマったのでメモ。
#Dockerな人たちはこういう問題は起こらないのかな?
まっしろ現象
ver1.4 にしたら↓こんなことになっちゃった人むけ。
画面真っ白。
原因
ここら辺の話が元で、要するに /home/mastodon/live/public を読めなくなるってことです。
パターンとしてはたぶん2つあって、
- nginxを使ってる → /etc/nginx/conf.d/mastodon.conf の設定 or /home/mastodonのパーミッションの問題
- nginxを使ってない → これはどうしようもないけど RAILSの設定を変えれば回避可能
nginxを使ってる場合
v1.4になったあたり(たぶん)でproduction_guideの記述が変わってて、nginxの設定ファイルが以下のようになっています。
location ~ ^/(packs|system/media_attachments/files|system/accounts/avatars) { add_header Cache-Control "public, max-age=31536000, immutable"; try_files $uri @proxy; }
v1.4で静的なファイルが public/asset から public/packs とかにかわってるので、それの対応です。
古いproduction_guideの記述だとここの記述がなかったりパスが違ってたりして、その場合はnginxがrailsに丸投げしてて、rails側で静的なファイルを出していたようです。
で、v1.4に変わったときにrailsが静的ファイルを出さなくなったもんで、エラー(404)になると。
上のlocationがあると、railsに渡す前に nginxが静的ファイルを配信してくれるので、うまいことやってくれます。
locationちゃんと書いたけど動かねーよ!!
という人は私でした。
普通にadduser mastodon してたので、/home/mastodon の権限が0700になってて nginxからは見えなかったという初心者オチでしたよ orz
nginx使ってない場合
IISとか、別のサーバーからプロキシしてるパターンですね。
結局現象としては上と同じで、railsが静的ファイルを配信してくれないのが原因です。
おそらくセキュリティ的な問題とかでわざと静的ファイルを出さないようにしてると思われますので、以下の解決方法は推奨されないと思います。自己責任にてお試しください。
で、件のissueに回答している人のコメントから得た答えがこちら。
RAILS_SERVE_STATIC_FILES=true
これを .env.production に1行加えればよろしい。
これで静的ファイルを配信してくれます。めでたしめでたし。