時には立ち止まってみるのもいいよ

仕事の合間の息抜き&備忘録。最近息抜きと仕事の区別がついていない。

マストドン v1.4の悲劇 (CentOS7+非Docker)

流行ってんだか流行ってないんだかよくわからないマストドン

 

思うところあってインスタンスを立てようとしたらハマったのでメモ。

#Dockerな人たちはこういう問題は起こらないのかな?

 

まっしろ現象

ver1.4 にしたら↓こんなことになっちゃった人むけ。

画面真っ白。

f:id:poiuy56:20170619203934p:plain

 

原因

github.com

ここら辺の話が元で、要するに /home/mastodon/live/public を読めなくなるってことです。

パターンとしてはたぶん2つあって、

  1. nginxを使ってる → /etc/nginx/conf.d/mastodon.conf の設定 or /home/mastodonパーミッションの問題
  2. 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行加えればよろしい。

 

これで静的ファイルを配信してくれます。めでたしめでたし。