質問: FreeBSD ApacheでPassengerを使っています。rails4でrubyはrvm上です。 staging機(`RAILS_ENV=staging`)を、FreeBSD 9.3 RELEASEから 10.3 にバージョンアップしたところ、今まで幸せに動いていたRailsアプリがことごとく、RAILS_ENVになぜか指定していない`development`が渡されてしまいアプリのWebページに例の赤い文字で ``` Migrations are pending; run 'bin/rake db:migrate RAILS_ENV=development' to resolve this issue ``` と表示されてしまうようになりました。 繰り返しになりますが、`RAILS_ENV`は元々`staging`で、既にmigrateしているのですが、バージョンアップ後なぜか(サーバーには一切設定していない)`development`であるとされてしまっているという状況です。 つまり、httpd-vhost.conf には、`RailsEnv staging`を指定しています。ちなみに複数のアプリをサブディレクトリで動かしています。 そのようなわけで、httpd-vhost.confは ``` RailsEnv staging RailsBaseURI /app1 RailsBaseURI /app2 RailsBaseURI /app3 ``` のような感じで、いずれのアプリも上記の`Migrations are pending`が表示されます(アプリとしては動いている) 関係するかどうか不明ですが、 /var/log/httpd-error.log でエラーの内容を見てみると、 ``` [ 2018-03-26 19:29:07.8404 42653/0x80540a400 age/Cor/CoreMain.cpp:907 ]: Checking whether to disconnect long-running connections for process 26796, application /home/staging/www/webapp/app1 (staging) App 26899 stderr: PassengerAgent: environment corrupt; missing value for SERVER_S App 26899 stderr: PassengerAgent: environment corrupt; missing value for SERVER_S ``` のようになっていました。表示の`environment corrupt`が上記のことを意味しているのかどうかは不明です。なお、 `PassengerAgent: environment corrupt`や`missing value for SERVER_S`をググっているのですが、手がかりが見つかりませんでした。 Passengerのバージョンは 5.1.2, 5.1.12, 5.2.1 で試してみましたが、いずれのバージョンでも起きます。Rubyは 2.2.7 です。 どうぞよろしくお願いいたします。
回答: 訂正と自己回答します。 `RAILS_ENV`が必ず`development`になる問題は、アプリのあるユーザーのディレクトリに`.bash_profile`を作ったあと、発生しなくなりました(`.bashrc`はあったが`.bash_profile`がなかった)。しかし、これは因果関係が曖昧です。ユーザーディレクトリにある設定が関係するということがあるのでしょうか?よくわかりません。 なお、`PassengerAgent: environment corrupt; missing value for SERVER_S`は特に関係なかったようです。実際には、最後に以下のエラーが起こっていて(見落としていました)envが bashを起動できないというエラーが起きていました。 ``` /var/log/httpd-error.logのエラー ↓ App 26899 stderr: env: bash: No such file or directory ``` どこでエラーが起こっているかというと、 rvmのスクリプト `/usr/local/rvm/wrappers/ruby-2.2.7/ruby` でした。 先頭行に ``` #!/usr/bin/env bash ``` とあります。`/usr/bin/env`が`bash`を見つけられず`No such file or directory`になっています。 `/usr/local/bin`のPATH設定がなぜか渡っていないようです。 rvmあるいはPassengerの設定などの修正で直す方法があるのかもしれません。 ご存じの方がいらっしゃいましたら教えてください。 今回は、Apacheの下にPATHの環境変数さえ渡せればとりあえず回避できるので、 `/usr/local/etc/apache24/envvars.d` に `path.env` を作って`/usr/local/bin`へのPATHを書きました。`chmod 755 path.env` するようです。(→参考:right way to set PATH for startup scripts ) いずれにしても、釈然としない状況です。