Я могу выполнять задачи, которые мне нужны, через rails console. Однако эти задачи должны выполняться периодически, и я не хочу вводить каждую команду по отдельности в rails console. Как можно запустить Ruby-скрипт на моем самостоятельно размещенном экземпляре Discourse?
Кроме того, скрипт будет читать CSV-файл. Куда мне поместить этот CSV-файл, чтобы он оставался доступным внутри Docker-контейнера и не исчезал после обновлений?
Вы указали, что хотите, чтобы «задачи выполнялись периодически».
Если это подразумевается «на протяжении всего существования сообщества», то стоит написать собственный плагин для этого. Это не намного сложнее, чем запускать команды в консоли Rails (что грязно и более рискованно!).
Это также позволит вам хранить код, правильно управлять им и со временем совершенствовать его.
Альтернативно можно определить задачу Rake, но вам нужно будет где-то её хранить, возможно, тоже в плагине!
Да, это было неудачное формулирование. Я имел в виду следующее: мне нужно запускать эту задачу несколько раз в течение жизни сообщества. Однако фиксированного периода нет, и момент её запуска определяется каким-то внешним событием. Таким образом, я буду запускать задачу самостоятельно несколько раз без какого-либо регулярного временного интервала между запусками.
Так что, возможно, задача rake станет вашим основным решением. Она специально предназначена для запуска разовых скриптов. Однако я бы всё же поместил её в плагин, так как тогда вы сможете удобно управлять ею на GitHub и никогда не забудете, где она находится, или не удалите её по ошибке.
Вы можете либо создать rake-задачу, либо поместить это в задание, которое следует запускать вручную через /sidekiq.
Вы можете загрузить свой CSV-файл через интерфейс пользователя и передать его со значением настройки, как предложено, либо загрузить его в тему и настроить ваш скрипт для получения последнего сообщения/загрузки в теме, либо загрузить файл в /var/discourse/shared/standalone/xxx.csv и получить к нему доступ как /shared/xxx.csv в скрипте. Или, возможно, вам стоит реализовать всю задачу через API, а не загружать CSV-файл.
Вы не описываете, что именно пытаетесь сделать, а лишь предлагаете решение, которое может оказаться не самым лучшим.