10

SinatraとActiveRecord(3.2.3)を使用して小さなアプリを作成しようとしています。

これは私のメインファイルがどのように見えるかです:

require "sinatra"
require "sinatra/reloader"
require "active_record"
...

ActiveRecord::Base.establish_connection(
  adapter:  'sqlite3',
  database: 'db.sqlite3',
  host:     'localhost',
)

class Post < ActiveRecord::Base
  ...
end

get('/') { ... }
get('/posts') { ... }
...

動作しますが、コンソールに警告が表示されることがあります。

非推奨の警告:データベース接続は自動的に閉じられません。スレッドの最後で、接続を呼び出してデータベース接続を閉じてくださいclose。例:ActiveRecord :: Base.connection.close '

警告が発生した場合、ページが更新されるまでに長い時間がかかります。どこで接続を閉じるべきかわかりません。ファイルの一番下に配置しようとしました ActiveRecord::Base.connection.closeが、役に立ちません。

アップデート:

サーバーを再起動せずに効果を確認するために、 sinatra-contribgemのsinatra/reloaderプラグインも使用していることを忘れました。

require "sinatra/reloader"

コメントアウトすると、問題は解消されます。しかしとにかく、私はリローダーを無効にせずに問題を取り除く方法を考えています。

4

3 に答える 3

13

スタックにミドルウェアを追加する必要があります。この行をconfig.ruラックアップファイルに追加するだけです。

use ActiveRecord::ConnectionAdapters::ConnectionManagement

ここで答えを見つけました:https ://github.com/puma/puma/issues/59

于 2012-04-18T15:03:23.427 に答える
13

受け入れられた答えは、Sinatra on Thin(スレッドモード)では機能しませんでした。代わりに私は使用しました:

after do
  ActiveRecord::Base.connection.close
end
于 2012-12-18T06:43:19.033 に答える
1
ActiveRecord::Base.remove_connection

私にとっては問題なく動作し、ドキュメントにリストされています。

于 2017-05-08T19:46:00.417 に答える