🇺🇦Допомогти Україні

Як працює '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. Тобто, транзакція спрацювала.

Цей допис поки що не має жодних доповнень від автора/ки.

Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
08 трав., 07:57

Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)

meme code
meme code@memecode
09 трав., 12:43

[Фікс] Rails Admin - undefined local variable or method javascript_importmap_shim_nonce_configuration_tag

meme code
meme code@memecode
Що таке технічний борг (technical debt) в IT проєктах?
13 трав., 06:17

Що таке технічний борг (technical debt) в IT проєктах?

meme code
meme code@memecode
13 трав., 07:11

Що означає скоуп (scope) в управлінні IT-проєктами?

meme code
meme code@memecode
Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?
13 трав., 07:20

Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?

meme code
meme code@memecode
Що означає "Нативний"?
22 трав., 07:01

Що означає "Нативний"?

meme code
meme code@memecode
Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?
29 трав., 08:05

Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?

meme code
meme code@memecode
29 трав., 09:09

Які операційні системи підтримують Ruby?

meme code
meme code@memecode
Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?
29 трав., 09:30

Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?

meme code
meme code@memecode
В чому різниця між immediate value та reference у Ruby?
29 трав., 12:00

В чому різниця між immediate value та reference у Ruby?

meme code
meme code@memecode
Чому Ruby код повертає nil після виконання puts?
29 трав., 20:30

Чому Ruby код повертає nil після виконання puts?

meme code
meme code@memecode
Яка різниця між nil і false в Ruby?
29 трав., 20:59

Яка різниця між nil і false в Ruby?

meme code
meme code@memecode