0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Passenger 6.0.5 で ActiveRecord 使った Sinatra アプリが死んだ

Posted at

何の話?

CentOS 8 + Apache 2.4 + Phusion Passenger 6.0 で,ActiveRecord を使った Sinatra アプリを動かしていた。
Ruby のバージョンは 2.7.1 だが,たぶんこのバージョンはあまり関係無い。

Passenger 6.0.4 では動いていたのに 6.0.6 では,本番(production)環境で起動すらしなくなった。
手許(ローカル)ではちゃんと動作している。

Apache のエラーログ(/var/log/httpd/error_log)には以下のように出ていた。

'production' database is not configured. Available: [] (ActiveRecord::AdapterNotSpecified)

原因

どうも Passenger 6.0.5 で導入された変更が原因のようだ。
ここに issue が上がっている。
https://github.com/phusion/passenger/issues/2281

同様の問題は Sinatra 以外でも起こりうるが,Rails では起こらない(たぶん)。

死んだコード

件の Sinatra アプリは,SQLite3 データベースにあらかじめ入れておいたデータを検索して表示するだけのごく簡単なもの。
データベースファイルは,とくに production 用とか development 用とか分けていない。

接続のところは

ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: db_file)

てな感じに書いていた。
ローカル変数 db_file には,SQLite3 ファイルのパスが代入されている。

修正

どうも,ActiveRecord::Base.configurations をセットしてやらなければならないようなので,上記を

ActiveRecord::Base.configurations = {
  "production" => {"adapter" => "sqlite3", "database" => db_file },
  "development" => {"adapter" => "sqlite3", "database" => db_file },
}
ActiveRecord::Base.establish_connection

のように変えた。

これで本番環境でも動くようになった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?