当在Ubuntu服务器上使用Ansible部署Rails 4.2应用时,在运行rake db:migrate任务时,为什么会创建具有root权限的日志文件?

问题描述 投票:1回答:1

问题的范围

  • 4.2.11
  • Ansible 2.1.1.0
  • 乌班图 14
  • Ubuntu用户。deploy

我有一个Rails应用,我通过Ansible脚本部署到Ubuntu服务器上。

我不明白为什么当Ansible脚本执行RACK任务时,Rails应用会以root权限创建日志文件。

enter image description here

在我的例子中,它正在运行 rake db:migrate 但也有同样的行为 rake assets:precompile

从下面的照片可以看出,应用程序是通过用户 "deploy "部署的,但是在运行rake任务后,它创建了2个具有root权限的日志文件,在重启web服务器后,它以权限拒绝的错误崩溃,所以我需要手动更改所有权。在重启web服务器后,它以权限被拒绝的错误而崩溃,所以我需要手动将所有权改为------------。deploy:deploy

enter image description here

Rails记录器的结构看起来也很可疑。你可以检查 @dev=IO:<STDERR> 值。我在另一个项目中检查了一下,在那里我可以看到类似于 @dev=#<File:/var/www/.../log/production.log>

enter image description here

我试着去探索 ror4 但到目前为止,还无法理解发生了什么。唯一的想法是,可能是Rails在创建日志文件和 STDERR 产出

如果你有类似的问题,请帮助我,或者指出我可以从哪里找。

ruby-on-rails ruby-on-rails-4 deployment file-permissions rake-task
1个回答
0
投票

rake脚本以root用户身份运行。

要回答这个问题,你必须添加完整的Ansible脚本或bundle脚本,如果你手动添加一个 "sudo "命令或其他不寻常的东西。

在ansible中定义用户有不同的可能位置。

请阅读ansible文档中的become部分 https:/docs.ansible.comansiblelatestuser_guidebecome.html。

或者尝试一下

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

根据你的需要改变become_method,例如become_flags。'-s binsh' 或 sudo

© www.soinside.com 2019 - 2024. All rights reserved.