Почему приложение Rails 4.2 создает файлы журналов с разрешениями root при развертывании его на сервере Ubuntu с использованием Ansible во время выполнения задачи rake db: migrate - PullRequest
2 голосов
/ 28 апреля 2020

Объем проблемы

  • Рельсы 4.2.11
  • Ansible 2.1.1.0
  • Ubuntu 14
  • Пользователь Ubuntu: deploy

У меня есть приложение Rails, которое я развертываю на сервере Ubuntu по сценарию Ansible.

У меня проблема с пониманием того, почему приложение Rails создает файлы журналов с разрешениями root, когда скрипт Ansible выполняет задачи rake.

enter image description here

В моем примере он работает rake db:migrate, но также ведет себя с rake assets:precompile

Вы можете увидеть на фото ниже, что Приложение развертывается через пользователя 'deploy', но после запуска задачи rake оно создает 2 файла журнала с разрешением root. После перезапуска веб-сервера он выдает sh с ошибкой отказа в разрешении, поэтому мне нужно вручную изменить владельца на deploy:deploy

enter image description here

Структура регистратора Rails также выглядит подозрительно. Вы можете проверить значение @dev=IO:<STDERR>. Я проверил в другом проекте, и там я вижу что-то вроде @dev=#<File:/var/www/.../log/production.log>

enter image description here

Я пытался изучить исходный код ror4, но так Далеко не повезло понять оттуда, что происходит. Единственная идея заключается в том, что Rails вызывает исключение при создании файла журнала и STDERR становится выводом

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

1 Ответ

0 голосов
/ 07 мая 2020

Сценарий rake запускается как root Пользователь.

Чтобы ответить на вопрос, необходимо добавить полный сценарий ansible или сценарий пакета, если вы вручную добавляете команды "sudo" или что-то необычное.

Существуют различные возможные позиции для определения пользователя в ansible.

Прочтите раздел стать в ansible документации https://docs.ansible.com/ansible/latest/user_guide/become.html

Или попробуйте с помощью

- name: Run db:migrate
  shell: ... rake cmd ...
  become: yes
  become_user: deploy
  become_method: su

Измените становление метода на ваш необходимо, например, стать_флагами: '-s / bin / sh' или sudo

...