[解決済み] Rails + Postgres drop エラー: データベースは他のユーザーによってアクセスされています。
2022-12-13 17:29:38
質問
Postgres上で動作するrailsアプリケーションを持っています。
テスト用と本番用の2つのサーバを持っています。
非常に頻繁に、テストサーバー上で本番用DBをクローンする必要があります。
私がVlad経由で実行しているコマンドは、次のとおりです。
rake RAILS_ENV='test_server' db:drop db:create
問題は、以下のエラーが出ることです。
ActiveRecord::StatementInvalid: PGError: ERROR: database <database_name> is being accessed by other users DROP DATABASE IF EXISTS <database_name>
これは、誰かが最近Web経由でアプリケーションにアクセスした場合に発生します(postgresは開いた"session"を保持します)。
postgres DBのセッションを終了させる方法はありますか?
ありがとうございます。
編集
phppgadminのインターフェースを使ってデータベースを削除することはできますが、rakeのタスクではできません。
phppgadminのドロップをrakeタスクで再現するにはどうしたらよいでしょうか。
どのように解決するのですか?
アプリケーションで実行中のpostgresqlの接続を切断すれば、db:dropをうまく実行することができます。 では、どのようにして接続を切断するのでしょうか? 私は以下のようなrakeタスクを使っています。
# lib/tasks/kill_postgres_connections.rake
task :kill_postgres_connections => :environment do
db_name = "#{File.basename(Rails.root)}_#{Rails.env}"
sh = <<EOF
ps xa \
| grep postgres: \
| grep #{db_name} \
| grep -v grep \
| awk '{print $1}' \
| xargs kill
EOF
puts `#{sh}`
end
task "db:drop" => :kill_postgres_connections
rails の下から接続を殺すと、次にページを読み込もうとしたときに嘔吐することがありますが、再度読み込むと接続が再確立されます。
関連
-
[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。
-
[解決済み] psql: FATAL: データベース "<user>" が存在しない
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] RVMでRubyのデフォルトバージョンを設定するには?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] bundle install --without production は何をするのですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
-
[解決済み] PostgreSQLデータベースにアクティブな接続がある場合、そのデータベースを削除する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] Rubyの文字列から日付への変換
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある