Ta treść została automatycznie przetłumaczona z ukraińskiego.
Czasami podczas rozwoju może wystąpić błąd PG::ObjectInUse: ERROR.
Na przykład:
rake db:drop;
Pokaże nam następujący błąd:
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)
Tu wszystko jest dość proste. Komunikat jest bardzo informacyjny i dosłownie mówi - database "myproject_development" is being accessed by other users. To znaczy, że obecnie nie możemy usunąć bazy danych, ponieważ ma aktywne połączenie. Lokalne zazwyczaj to albo uruchomiony serwer rails i/lub rails c (konsola). Musimy je zamknąć, aby proces odłączył się od bazy danych. Po tym ponownie uruchamiamy rake db:drop; i wszystko powinno działać.
Czasami może się zdarzyć, że lokalnie wydaje się, że nie ma otwartych procesów / połączeń w terminalu, ale nadal mamy błąd "database is being accessed by other users". Zazwyczaj oznacza to, że gdzieś mamy proces, który nadal pracuje z bazą danych. Czasami może to być proces w tle / demon. Ale aby znaleźć i zabić ten proces - potrzebujemy więcej kontekstu. Można przeskanować porty i procesy i zabić te, które używają bazy. Ale o tym prawdopodobnie napiszę w innej notatce.
Ten post nie ma jeszcze żadnych dodatków od autora.