Auto | arch-x1: 2026-06-03 21:34:10

This commit is contained in:
Dmitry
2026-06-03 21:34:10 +03:00
parent b0e229d980
commit 68ce894541
141 changed files with 1 additions and 10750 deletions
@@ -1,74 +0,0 @@
---
status: seed
type: guide
tags:
- programming
- ruby-on-rails
- api
created: 2026-05-25
updated: 2026-05-25
title: API импорт в Rails через runner
source: "[[Работа с API для проекта Attendance Mephi]]"
---
# API импорт в Rails через runner
Памятка по ручному запуску импортов в [[Ruby On Rails]]-проекте Attendance Mephi для [[НИР]].
## Контекст
Импорт запускается через `bin/rails runner`:
```sh
/home/ada/.local/bin/mise exec ruby -- bin/rails runner '...'
```
Актуальный семестр берется из `Term.actual`. Для старта `2026-02-07` код семестра: `20252`.
## Credentials
```yaml
api:
home_mephi:
host:
code:
token:
students_mephi:
host:
username:
password:
```
См. также: [[Rails credentials edit не открывает редактор]].
## Endpoints
```text
GET {home_mephi.host}/study_groups.json?term_code=20252&code=...&token=...
GET {home_mephi.host}/tutors.json?term_code=20252&code=...&token=...
GET {students_mephi.host}/get_list_by_group_name?group=...&term=20252
GET {home_mephi.host}/tutors/{staff_id}/schedules.json?term_code=20252&date=YYYY-MM-DD&code=...&token=...
```
`students_mephi` использует Basic Auth: `username/password`.
## Ручная загрузка
```sh
/home/ada/.local/bin/mise exec ruby -- bin/rails runner 'ImportGroupsService.execute'
/home/ada/.local/bin/mise exec ruby -- bin/rails runner 'ImportTutorsService.execute'
/home/ada/.local/bin/mise exec ruby -- bin/rails runner 'ImportStudentsService.execute'
/home/ada/.local/bin/mise exec ruby -- bin/rails runner 'term = Term.actual; ImportDisciplineService.execute(nil, term)'
```
Расписание на сегодня:
```sh
/home/ada/.local/bin/mise exec ruby -- bin/rails runner 'term = Term.actual; ImportScheduleService.execute(Date.today, term)'
```
Расписание за весь семестр до сегодня:
```sh
/home/ada/.local/bin/mise exec ruby -- bin/rails runner 'term = Term.actual; finish = [term.get_finish_date, Date.today].min; (term.start_date..finish).each { |date| ImportScheduleService.execute(date, term) unless date.wday == 0 }'
```
@@ -1,42 +0,0 @@
---
status: seed
type: guide
tags:
- programming
- ruby-on-rails
- deploy
created: 2026-05-29
updated: 2026-05-29
title: Capistrano deploy через systemd
source: "[[Команды для деплоя с помощью Capistrano]]"
---
# Capistrano deploy через systemd
Заметка про выдачу минимальных `sudo`-прав для деплоя Rails-приложения через Capistrano, когда сервисы управляются через `systemd`.
## Sudoers
В `/etc/sudoers` задаётся alias для команд, которые Capistrano может выполнять без пароля:
```sudoers
Cmnd_Alias PUMA_CONTROL = /usr/bin/mv /tmp/navigation_backend_puma_production.service /etc/systemd/system/, /usr/bin/mv /tmp/navigation_backend_puma_production.socket /etc/systemd/system/, /bin/systemctl daemon-reload, /bin/systemctl enable navigation_backend_puma_production, /bin/systemctl start navigation_backend_puma_production, /bin/systemctl stop navigation_backend_puma_production, /bin/systemctl restart navigation_backend_puma_production, /bin/systemctl enable navigation_backend_puma_production.socket, /bin/systemctl restart navigation_backend_sidekiq_production.service, /bin/systemctl restart navigation_backend_solid_queue_production.service, /bin/systemctl restart solid_queue
deploy ALL = NOPASSWD: PUMA_CONTROL
```
Где:
- `deploy` — пользователь, от имени которого выполняется деплой;
- `navigation_backend` — имя приложения в service/socket unit-файлах.
## Команды деплоя
```bash
cap production puma:install
cap production deploy
```
`puma:install` кладёт `systemd` unit-файлы, после чего `deploy` перезапускает Puma и фоновые сервисы без интерактивного ввода пароля.
## Связанные заметки
- [[Ruby On Rails]]
- [[Sidekiq - основа работы]]
@@ -1,70 +0,0 @@
---
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`.
@@ -1,21 +0,0 @@
---
status: processing
type: moc
tags:
- programming
- ruby-on-rails
created: 2025-12-17
updated: 2026-05-29
title: Ruby On Rails
---
# Ruby On Rails
%% Begin Waypoint %%
- [[Active Storage]]
- [[API импорт в Rails через runner]]
- [[Capistrano deploy через systemd]]
- [[Rails credentials edit не открывает редактор]]
- [[Sidekiq - основа работы]]
%% End Waypoint %%