Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
rails console --sandbox uruchamia konsolę Rails w specjalnym trybie, w którym wszystkie zmiany wprowadzone w bazie danych są automatycznie cofane po zakończeniu sesji konsoli. Ta opcja zapewnia bezpieczne środowisko do testowania, w którym możesz eksperymentować z danymi, nie martwiąc się o trwałe zmiany.
Nigdy wcześniej nie używałem opcji --sandbox. Ale w ostatnich dniach zacząłem ją aktywnie wykorzystywać. Czasami zdarza się, że po zanieczyszczeniu lokalnej bazy danych trzeba ją zresetować. Piaskownica pozwala zaoszczędzić trochę czasu. Wszystkie działania w konsoli są owinięte w dużą, inteligentną atomową transakcję.
Jak działa rails console --sandbox?
Użycie polecenia rails console --sandbox otwiera interaktywną konsolę w 'trybie bezpiecznym'. Każda operacja na bazie danych odbywa się wewnątrz transakcji. Po wyjściu z konsoli wszystkie transakcje są automatycznie cofane. To pozwala bezpiecznie testować zmiany i sprawdzać kod bez ryzyka uszkodzenia danych w bazie danych.
Przykład
rails console --sandbox
Konsola powie nam:
Loading development environment in sandbox (Rails 7.0.4.3) Any modifications you make will be rolled back on exit
Stwórzmy użytkownika:
User.create!(name: 'R2D2', email: '[email protected]', password: 'Password666%', password_confirmation: 'Password666%')
Otrzymamy taki log:
irb(main):001:0> User.create!(name: 'R2D2', email: '[email protected]', passw ord: 'Password666%', password_confirmation: 'Password666%') TRANSACTION (0.8ms) BEGIN TRANSACTION (0.6ms) SAVEPOINT active_record_1 User Exists? (3.8ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "[email protected]"], ["LIMIT", 1]] User Create (5.4ms) INSERT INTO "users" ............ TRANSACTION (1.9ms) RELEASE SAVEPOINT active_record_1 => #<User id: 41, email: "[email protected]", created_at: "2024-05-23 19:31:20.142273000 +0000", updated_at: "2024-05-23 19:31:20.142273000 +0000", name: "R2D2" ....>
Zwróć uwagę na TRANSACTION (1.9ms) RELEASE SAVEPOINT active_record_1
Wychodzimy z konsoli (transakcja powinna się cofnąć). Wchodzimy ponownie i sprawdzamy User.last.id. W piaskownicy stworzyliśmy użytkownika z id 41.
irb(main):002:0> exit ~/Documents/experiments/sandbox rails console Loading development environment (Rails 7.0.4.3) irb(main):001:0> User.last.id User Load (1.9ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1 [["LIMIT", 1]] => 40
Widzimy, że ostatni zapisany użytkownik to 40. To znaczy, że transakcja zadziałała.
Ten post nie ma jeszcze żadnych dodatków od autora.