Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Jak działa 'rails console --sandbox'?

Okładka posta: Jak działa 'rails console --sandbox'?
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.

Włączamy YJIT w Ruby 3.2.1 (Ruby on Rails)
8 maj 07:57

Włączamy YJIT w Ruby 3.2.1 (Ruby on Rails)

meme code
meme code@memecode
9 maj 12:43

[Fix] Rails Admin - niezdefiniowana lokalna zmienna lub metoda javascript_importmap_shim_nonce_configuration_tag

meme code
meme code@memecode
Czym jest dług techniczny (technical debt) w projektach IT?
13 maj 06:17

Czym jest dług techniczny (technical debt) w projektach IT?

meme code
meme code@memecode
13 maj 07:11

Co oznacza zakres (scope) w zarządzaniu projektami IT?

meme code
meme code@memecode
Co to jest "rozprzestrzenienie zakresu" (Scope Creep / Skołp krip)?
13 maj 07:20

Co to jest "rozprzestrzenienie zakresu" (Scope Creep / Skołp krip)?

meme code
meme code@memecode
Co oznacza "Nattywny"?
22 maj 07:01

Co oznacza "Nattywny"?

meme code
meme code@memecode
Do czego potrzebna jest baza danych CVE (Wspólne Luki i Ekspozycje)?
29 maj 08:05

Do czego potrzebna jest baza danych CVE (Wspólne Luki i Ekspozycje)?

meme code
meme code@memecode
29 maj 09:09

Jakie systemy operacyjne wspierają Ruby?

meme code
meme code@memecode
Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?
29 maj 09:30

Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?

meme code
meme code@memecode
Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?
29 maj 12:00

Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?

meme code
meme code@memecode
Dlaczego kod Ruby zwraca nil po wykonaniu puts?
29 maj 20:30

Dlaczego kod Ruby zwraca nil po wykonaniu puts?

meme code
meme code@memecode
Jaka jest różnica między nil a false w Ruby?
29 maj 20:59

Jaka jest różnica między nil a false w Ruby?

meme code
meme code@memecode