Запись в файлы в приложении на базе OpenShift Online - PullRequest
0 голосов
/ 18 октября 2018

Я начал работать над небольшим ботом Discord, размещенным на OpenShift Online, и я дошел до того, что я пытаюсь сохранить данные в разных развертываниях.Насколько я могу судить, я должен быть в состоянии создать постоянный том, заявить о нем и смонтировать его в своей конфигурации развертывания, а затем иметь возможность читать и записывать в него.

Я не могу за жизнья преодолел проблему с разрешениями, хотя.Самый близкий ответ, который я нашел, - это установить переменную среды OPENSHIFT_DATA_DIR в каталог подключенного тома, как обсуждалось тангенциально здесь , но я все равно получаю отказ в доступе при попытке записи в этот каталог.

Репозиторий: https://github.com/Solesaver/Alfred-Discord-Bot

Текстовый дамп конфигурации развертывания: https://dumptext.com/RBDbnfcP

Я сделал постоянный том и запрос с режимами доступа Read-Write-Once, конфигурация развертывания смонтированаat / data в режиме чтения-записи.Я добавил в среду развертывания переменную с именем OPENSHIFT_DATA_DIR и значением /data.

Независимо от того, какую комбинацию я пробовал до сих пор, я всегда получаю отказ в доступе, когда бью по строке 123 бота.js:

fs.writeFileSync(howmanyPath, JSON.stringify(howmanyObj, null, 4), 'utf8');

В конце концов, все, что мне действительно нужно выяснить, - это как указать каталог, к которому произвольный пользователь OpenShift запускает мое приложение с разрешениями на чтение / запись.Я почти уверен, что, поняв это, я смогу подключить постоянный том к тому, что в итоге окажется.

1 Ответ

0 голосов
/ 19 октября 2018

Если вы смонтируете постоянный том по пути к каталогу (указав это в конфигурации развертывания), произвольный пользователь, который OpenShift использует для запуска вашего контейнера, будет иметь доступ к этому каталогу.Вы можете проверить это, открыв удаленную оболочку в работающем контейнере (oc get po, проверьте имя модуля и используйте его в oc rsh <pod_name>, затем ls -la <mount_path>).

Проблема может заключаться в том, как вы указываетефактический путь в вашем исходном коде.Похоже, что он должен был работать в этом коммите (при условии, что конфигурация развертывания была такой же в то время).В более поздних коммитах путь выглядит жестко закодированным как относящийся к текущему каталогу, поэтому при попытке создать каталог с ссылочной конфигурацией развертывания , которая монтирует постоянный том под *, должно быть отказано в разрешении.1010 * путь, но должен работать с /opt/app-root/src/data путем монтирования.

Если это не поможет вам устранить проблему, рассмотрите возможность добавления полного сообщения об ошибке с трассировкой стека к вашему вопросу.

...