vault backup: 2026-05-24 15:03:28

This commit is contained in:
Dmitry
2026-05-24 15:03:28 +03:00
parent 6189cfdd1c
commit 7335ca7c23
705 changed files with 18360 additions and 154 deletions
@@ -0,0 +1,97 @@
---
status: seed
type: knowledge
tags:
- programming
- ruby
created: 2026-05-17
updated: 2026-05-17
title: Ruby - массивы
source: "[[Ruby - массивы]]"
---
# Ruby — массивы
Массив в Ruby — экземпляр класса `Array`. Поскольку массивы являются объектами со своими методами, работа со списками данных упрощается.
Связанные темы: [[Ruby - основы языка]]
## Создание массива
```ruby
a1 = [1, 2, 3] # литерал
a2 = %w{word1 word2} # массив строк без кавычек
a3 = ['start', nil, 5, [1, 2]] # разнотипные элементы, вложенный массив
a4 = Array.new # пустой массив
a5 = Array.new(3) # [nil, nil, nil]
a6 = Array.new(5, "Test") # ["Test", "Test", ...]
a7 = Array.new(5) { |i| i * i } # [0, 1, 4, 9, 16]
a8 = Array.[](1, 'a', /^A/) # через метод класса
```
Ruby поддерживает многомерные массивы с элементами разной размерности.
## Индексация
```ruby
a[0] # первый элемент
a[-1] # последний элемент
a[-2] # предпоследний
```
### Размер
```ruby
a.size # количество элементов
a.length # синоним size
```
## Поиск элементов
```ruby
a.include?(obj) # => true / false
a.index(obj) # индекс первого вхождения или nil
```
## Добавление элементов
```ruby
a << 4 # в конец
a += [5] # объединение
a.push(6) # в конец (синоним: append)
a.unshift(0) # в начало (сдвигает остальные вправо)
a.insert(2, x) # вставить перед элементом с индексом 2
```
## Удаление элементов
```ruby
a.delete(obj) # удалить все вхождения obj
a.delete_at(index) # удалить по индексу
a.delete_if { |x| block } # удалить все, подходящие под условие
a.shift # удалить и вернуть первый элемент
a.pop # удалить и вернуть последний элемент
```
## Срезы
```ruby
a[1..3] # диапазон индексов
a[1, 3] # начиная с индекса 1, длиной 3
a.values_at(0, 2, 4) # элементы по перечисленным индексам или диапазонам
a.first(n) # первые n элементов
a.last(n) # последние n элементов
```
## Полезные методы
```ruby
a.flatten # развернуть многомерный массив в одномерный
a.flatten! # то же, но изменяет сам массив
a.sample # случайный элемент
a.sample(n) # n случайных элементов
a.select { |x| block } # массив элементов, для которых block == true
```
@@ -0,0 +1,121 @@
---
status: seed
type: knowledge
tags:
- programming
- ruby
created: 2026-05-17
updated: 2026-05-17
title: Ruby - основы языка
source: "[[Ruby - основы языка]]"
---
# Ruby — основы языка
Ruby — объектно-ориентированный язык, но допускает процедурный стиль написания кода. Всё является объектом, включая числа и булевы значения.
Связанные темы: [[Ruby On Rails]]
## Синтаксис
- Знак препинания в конце строки не нужен
- Отступы не несут синтаксического смысла (в отличие от Python)
- Несколько команд в одной строке разделяются через `;`
```ruby
puts "Hello World!"
puts 42; puts "next line"
```
## Комментарии
```ruby
# однострочный комментарий
=begin
многострочный
комментарий
=end
```
## Типы данных
```ruby
"Hello".class # => String
true.class # => TrueClass
5.class # => Integer
6.4.class # => Float
nil.class # => NilClass
```
### Именование
- Переменные — с маленькой буквы: `my_var`
- Классы — с большой буквы: `MyClass`
- Ключевые слова языка использовать нельзя
### Преобразование типов
**Явное:**
| Метод | Что делает |
|--------|-----------------------------------------|
| `to_i` | к целому числу (дробная часть отсекается) |
| `to_f` | к вещественному числу |
| `to_s` | к строке |
**Неявное:** при математических операциях `Integer + Float``Float`.
## Управляющие конструкции
```ruby
# if без ветвления
if a > 0
action
end
# if-elsif-else
if a > 0
...
elsif a == 0
...
else
...
end
# unless — выполнится, если условие ложно
unless a > 0
action
end
# case
case a
when 1 then puts "один"
when 2 then puts "два"
else puts "другое"
end
```
## Циклы
| Оператор | Назначение |
|----------|-----------|
| `loop` | бесконечный цикл; выход через `break` |
| `while` | цикл с условием выполнения |
| `until` | цикл, пока условие ложно |
| `for` | итератор по перечислимому объекту |
| `next` | пропустить текущий шаг |
| `redo` | повторить текущий шаг заново |
**Диапазоны в `for`:**
```ruby
for i in 1..5 # от 1 до 5 включительно
for i in 1...5 # от 1 до 4 (5 не входит)
```
**Деление с остатком:**
```ruby
x, r = x.divmod(n)
```
@@ -0,0 +1,25 @@
---
status: processing
type: concept
tags:
- programming
- ruby-on-rails
created: 2025-12-17
updated: 2026-05-07
title: Active Storage
---
# Active Storage
**Active Storage** - система хранения файлов в Rails. Идейно, хранить в БД информацию о файлах, а сами файлы отдельно (локально или в ином хранилище)
Архитектура представляет из себя 3 таблицы в БД:
1. `**active_storage_blobs**` — метаданные файла
| | | | | | | |
|---|---|---|---|---|---|---|
|id|key|filename|content_type|byte_size|checksum|created_at|
||||||||
## Связанные заметки
- [[Volume - Docker]] — в Docker-деплое файлы Active Storage должны персистироваться через Volume; без этого файлы теряются при перезапуске контейнера
@@ -0,0 +1,70 @@
---
status: seed
type: guide
tags:
- programming
- ruby-on-rails
- debug
created: 2026-05-20
updated: 2026-05-20
title: Rails credentials edit не открывает редактор
source: "[[99 System/Archive/Rails credentials edit не открывает редактор|Rails credentials edit не открывает редактор]]"
---
# Rails credentials edit не открывает редактор
Заметка фиксирует кейс, когда `bin/rails credentials:edit` в [[Ruby On Rails]] завершается без открытия редактора и без явной ошибки.
## Симптом
Команда:
```bash
bin/rails credentials:edit
```
сразу печатает:
```text
File encrypted and saved.
```
При этом редактор не открывается, а credentials фактически не меняются.
## Причина
Rails 7.x выбирает редактор через helper `rails/command/helpers/editor.rb` и берёт `$VISUAL` приоритетнее `$EDITOR`.
Если переменная окружения `$VISUAL` установлена, например в `zed` или `code`, значение `$EDITOR` игнорируется. Если указанный в `$VISUAL` редактор не найден или не может быть запущен, системный вызов завершается с ошибкой, но Rails может молча продолжить выполнение и сохранить файл без изменений.
Связанный контекст: [[Environment Variables]] и [[Command Path]].
## Решение
На один запуск явно сбросить `$VISUAL` и задать рабочий редактор:
```bash
VISUAL="" EDITOR="nano" bin/rails credentials:edit
```
Можно заменить `nano` на любой редактор, который доступен в текущем окружении.
## Диагностика
Проверить, не установлен ли `$VISUAL`:
```bash
echo "VISUAL='$VISUAL'"
```
Проверить, находится ли редактор в `PATH`:
```bash
which nano
```
Если используется GUI-редактор вроде `code` или `zed`, отдельно проверить, что его CLI-команда доступна из той же shell-сессии, где запускается Rails.
## Практический вывод
Для `credentials:edit` важен не только `$EDITOR`, но и `$VISUAL`. Если Rails ведёт себя так, будто файл был сохранён без редактирования, сначала проверить переменные окружения редактора и доступность команды редактора через `PATH`.
@@ -0,0 +1,19 @@
---
status: stable
type: moc
tags:
- programming
- ruby-on-rails
created: 2025-12-17
updated: 2026-05-07
title: Ruby On Rails
---
# Ruby On Rails
%% Begin Waypoint %%
- [[Active Storage]]
- [[Rails credentials edit не открывает редактор]]
- [[Sidekiq - основа работы]]
%% End Waypoint %%
@@ -0,0 +1,21 @@
---
status: processing
type: concept
tags:
- programming
- ruby-on-rails
created: 2025-12-17
updated: 2026-05-07
title: Sidekiq - Основа Работы
---
# Sidekiq - Основа Работы
> Sidekiq - фоновый процессор задач для Ruby On Rails. Работает на базе Redis, обеспечивает ассинхронность выполнения задач, не блокируя интерфейс при, например, загрузке файла в фоне.
## Основные Концепции
1. **Worker** - класс,
## Связанные заметки
- [[Основы - Docker]] — Sidekiq требует Redis; в production и Redis, и Rails-приложение обычно запускаются как Docker-контейнеры
- [[Volume - Docker]] — данные очередей Redis нужно персистировать через Docker Volume