Обкладинка нотатки: Як працює 'rails console --sandbox'?

Як працює 'rails console --sandbox'?

Зміст дописунатисність на посилання, щоб перейти до потрібного місця
rails console --sandbox запускає консоль Rails у спеціальному режимі, де всі зміни, внесені в базу даних, автоматично скасовуються після завершення сеансу консолі. Цей прапорець надає безпечне середовище для тестування, де ви можете експериментувати з даними, не турбуючись про постійні зміни.
Я ніколи раніше не використовував опцію --sandbox. Але останніми днями почав активно використовувати. Іноді буває так, що насмітивши в локальну базу даних треба її ресетити. Пісочниця дозволяє трохи зекономити часу. Всі дії в консолі обгорнуті в велику, розумну атомарну транзакцію.

Як працює rails console --sandbox?

Використання команди rails console --sandbox відкриває інтерактивну консоль в 'безпечному режимі'. Кожна операція з базою даних відбувається всередині транзакції. Після виходу з консолі всі транзакції автоматично відкатуються. Це дозволяє безпечно тестувати зміни та перевіряти код без ризику пошкодження даних у базі даних.

Приклад

rails console --sandbox 
Консолька нам скаже:
Loading development environment in sandbox (Rails 7.0.4.3)
Any modifications you make will be rolled back on exit
Створимо юзера:
User.create!(name: 'R2D2', email: '[email protected]', password: 'Password666%', password_confirmation: 'Password666%')
Отримаємо такий лог:
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" ....>
Зверніть увагу на TRANSACTION (1.9ms)  RELEASE SAVEPOINT active_record_1
Виходимо з консолі (транзакція має видкатитись). Заходимо знову і перевіряємо User.last.id. В пісочниці ми створили юзера з 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
Бачимо, що останній збережений юзер - 40. Тобто, транзакція спрацювала.

🔗 Цитувати допис: "Як працює 'rails console --sandbox'?"

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

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


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

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

📝 Більше публікацій:
Обкладинка нотатки: Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
Обкладинка нотатки: Що таке технічний борг (technical debt) в IT проєктах?
Обкладинка нотатки: Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?
Обкладинка нотатки: Що означає "Нативний"?
Обкладинка нотатки: Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?
Обкладинка нотатки: Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?
Обкладинка нотатки: В чому різниця між immediate value та reference у Ruby?
Обкладинка нотатки: Чому Ruby код повертає nil після виконання puts?
Обкладинка нотатки: Яка різниця між nil і false в Ruby?
Дисклеймер

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

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