Запуск пользовательских скриптов на Ruby

Я могу выполнять задачи, которые мне нужны, через rails console. Однако эти задачи должны выполняться периодически, и я не хочу вводить каждую команду по отдельности в rails console. Как можно запустить Ruby-скрипт на моем самостоятельно размещенном экземпляре Discourse?

Кроме того, скрипт будет читать CSV-файл. Куда мне поместить этот CSV-файл, чтобы он оставался доступным внутри Docker-контейнера и не исчезал после обновлений?

Один из подходов — загрузить файл и затем сохранить URL в настройке. Загрузка файла предотвратит его удаление.

Вы можете запустить задачу в плагине. В плагинах Discourse и Pavilion множество примеров таких задач.

Мне интересно, не проще ли мой сценарий использования, чем я объяснил изначально. Обычно я делаю следующее:

./launcher enter app
rails c
> u= User.find(1)
> ещё какой-то код здесь

Что я хотел бы сделать:

./launcher enter app
./my_code.rb

где my_code.rb содержит то, что я выполнял ранее в консоли Rails.

Вы указали, что хотите, чтобы «задачи выполнялись периодически».

Если это подразумевается «на протяжении всего существования сообщества», то стоит написать собственный плагин для этого. Это не намного сложнее, чем запускать команды в консоли Rails (что грязно и более рискованно!).

Это также позволит вам хранить код, правильно управлять им и со временем совершенствовать его.

Альтернативно можно определить задачу Rake, но вам нужно будет где-то её хранить, возможно, тоже в плагине!

Да, это было неудачное формулирование. Я имел в виду следующее: мне нужно запускать эту задачу несколько раз в течение жизни сообщества. Однако фиксированного периода нет, и момент её запуска определяется каким-то внешним событием. Таким образом, я буду запускать задачу самостоятельно несколько раз без какого-либо регулярного временного интервала между запусками.

Так что, возможно, задача rake станет вашим основным решением. Она специально предназначена для запуска разовых скриптов. Однако я бы всё же поместил её в плагин, так как тогда вы сможете удобно управлять ею на GitHub и никогда не забудете, где она находится, или не удалите её по ошибке.

Вот множество примеров: discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Вы можете либо создать rake-задачу, либо поместить это в задание, которое следует запускать вручную через /sidekiq.

Вы можете загрузить свой CSV-файл через интерфейс пользователя и передать его со значением настройки, как предложено, либо загрузить его в тему и настроить ваш скрипт для получения последнего сообщения/загрузки в теме, либо загрузить файл в /var/discourse/shared/standalone/xxx.csv и получить к нему доступ как /shared/xxx.csv в скрипте. Или, возможно, вам стоит реализовать всю задачу через API, а не загружать CSV-файл.

Вы не описываете, что именно пытаетесь сделать, а лишь предлагаете решение, которое может оказаться не самым лучшим.