rails console --sandbox startet die Rails-Konsole im speziellen Modus, in dem alle Änderungen an der Datenbank nach Beendigung der Konsolensitzung automatisch zurückgesetzt werden. Dieses Flag bietet eine sichere Umgebung für Tests, in der Sie mit Daten experimentieren können, ohne sich um dauerhafte Änderungen sorgen zu müssen.
Ich habe die Option
--sandbox noch nie zuvor verwendet. Aber in den letzten Tagen habe ich angefangen, sie aktiv zu nutzen. Manchmal ist es so, dass man, nachdem man in der lokalen Datenbank herumgespielt hat, sie zurücksetzen muss. Die Sandbox ermöglicht es, ein wenig Zeit zu sparen. Alle Aktionen in der Konsole sind in eine große, intelligente
atomare Transaktion eingebettet.
Wie funktioniert rails console --sandbox?
Die Verwendung des Befehls
rails console --sandbox öffnet eine interaktive Konsole im 'sicheren Modus'. Jede Datenbankoperation erfolgt innerhalb einer Transaktion. Nach dem Verlassen der Konsole werden alle Transaktionen automatisch zurückgesetzt. Dies ermöglicht es, Änderungen sicher zu testen und Code zu überprüfen, ohne das Risiko einer Beschädigung der Daten in der Datenbank.
Beispiel
rails console --sandbox
Die Konsole wird uns sagen:
Loading development environment in sandbox (Rails 7.0.4.3)
Any modifications you make will be rolled back on exit
Wir erstellen einen Benutzer:
User.create!(name: 'R2D2', email: '[email protected]', password: 'Password666%', password_confirmation: 'Password666%')
Wir erhalten folgendes Protokoll:
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" ....>
Beachten Sie
TRANSACTION (1.9ms) RELEASE SAVEPOINT active_record_1
Wir verlassen die Konsole (die Transaktion sollte zurückgesetzt werden). Wir gehen erneut hinein und überprüfen User.last.id. In der Sandbox haben wir einen Benutzer mit der ID
41 erstellt.
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
Wir sehen, dass der letzte gespeicherte Benutzer - 40 ist. Das heißt, die Transaktion hat funktioniert.