Розбираємо помилку PG::ObjectInUse (Ruby on Rails)

Іноді під час розробки може виникнути помилка PG::ObjectInUse: ERROR.
Наприклад:
rake db:drop;
Покаже нам наступну помилку:
PG::ObjectInUse: ERROR:  database "myproject_development" is being accessed by other users

DETAIL:  There is 1 other session using the database

Couldn't drop database 'myproject_development'

rake aborted!

ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR:  database "myproject_development" is being accessed by other users

DETAIL:  There is 1 other session using the database.

Caused by:PG::ObjectInUse: ERROR:  database "myproject_development" is being accessed by other users

DETAIL:  There is 1 other session using the database.
Tasks: TOP => db:drop:_unsafe

(See full trace by running task with --trace)
Тут все доволі просто. Повідомлення дуже інформативне й буквально каже - database "myproject_development" is being accessed by other users. Тобто наразі ми не можемо дропнути базу даних, бо у неї є активне підключення. Локально зазвичай це або запущений rails server та/або rails c (консоль). Треба їх закрити, щоб процес відключився від бази даних. Після цього перезапускаємо rake db:drop; і все має працювати.
Іноді може трапитись, що у нас локально здавалось би немає відкритих процесів / підключень в терміналі, але ми все ще маємо помилку "database is being accessed by other users". Зазвичай це означає що ми десь маємо процес, який все ще працює з базою даних. Іноді це може бути background-процес / daemon. Але для того щоб знайти й вбити цей процес - треба більше контексту. Можна просканувати порти та процеси й вбити ті що використовують базу. Але про це я напевно напишу в іншу нотатку.

🔗 Цитувати допис: "Розбираємо помилку PG::ObjectInUse (Ruby on Rails)"

Якщо ви хочете процитувати цей допис у своїй роботі, статті, блозі, використовуйте наведену нижче інформацію.

Розгорнути деталі


🙌 Підтримати блог @memecode

Ви можете поширити цей допис у соцмережах, чим допоможете платформі цейво розвиватись (* ^ ω ^)

📝 Більше публікацій:
Обкладинка нотатки: Що таке промпт (prompt) та промпт-інжинірінг?
Обкладинка нотатки: ZOMBIE в Ruby. Що це таке?
Обкладинка нотатки: Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
Дисклеймер

Інформація на сайті tseivo.com є суб'єктивною та відображає особисті погляди та досвід авторів та авторок блогів.

Використовуйте цей ресурс як одне з декількох джерел інформації під час своїх досліджень та прийняття рішень. Завжди застосовуйте критичне мислення. Людина сама несе відповідальність за свої рішення та дії.