ГоловнаВсі публікаціїКатегоріїПро проєкт

Як працює '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.05.2024 07:57

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

meme code
meme code@memecode
09.05.2024 12:43

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

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

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

meme code
meme code@memecode
13.05.2024 07:11

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

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

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

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

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

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

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

meme code
meme code@memecode
29.05.2024 09:09

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

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

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

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

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

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

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

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

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

meme code
meme code@memecode