【问题标题】:Rails 3.1 - permissions after a deploy with capistranoRails 3.1 - 使用 capistrano 部署后的权限
【发布时间】:2011-12-28 05:38:23
【问题描述】:

我正在使用 capistrano 将我的应用程序部署到我的新 Rails 3.1 服务器。

当我尝试浏览该页面时,出现 rails 错误。
在查看error.log 时,我看到的是:

ActionView::Template::Error (Permission denied - /var/www/episodecalendar/production/releases/20111227204950/tmp/cache/55B):
    32:                 </div>
    33:                 <div id="footer">
    34:                   <div id="footer_content">
    35:                     <% cache("footer") do %>
    36:               <%= render :partial => "partials/footer" %>
    37:             <% end %>
    38:             </div>
  app/views/layouts/application.html.erb:35:in `_app_views_layouts_application_html_erb___3483336897212790867_58416560'

显然/tmp 文件夹中的文件没有“正确”权限。示例:

root@Ubuntu:/var/www/episodecalendar/staging/current/tmp/cache/assets/C0C/690# ls -la
total 12K
drwxr-xr-x 2 root root 4.0K 2011-12-27 21:33 .
drwxr-xr-x 3 root root 4.0K 2011-12-27 21:33 ..
-rw-r--r-- 1 root root 2.6K 2011-12-27 21:33 sprockets%2F31007441199035e09c0c45c33930cf06

修复它的唯一方法是chmod 777 tmp/ -R,然后网站会立即加载。

我可以将 chmod 修复程序放在 capistrano 配方中,但这似乎是一个丑陋的 hack。
为什么 /tmp 文件夹在部署后没有“正确”权限,我该如何解决?

【问题讨论】:

  • 你是通过root用户部署的吗?如果是这样,您可能需要重新考虑。
  • 我听说这很糟糕 :) 但是只是更改用户也会遇到同样的问题,对吧?

标签: ruby-on-rails-3 permissions sprockets


【解决方案1】:

与其允许每个人访问 tmp chmod 777 -R tmp/ 中的所有文件和文件夹,不如考虑确保 /var/www/episodecalendar/staging/ 被任何用户递归chown'd (chown -R user:group /var/www/episodecalendar/staging)访问以运行 Web 服务器。

我建议创建一个单独的 deploy@Ubuntu 用户,以便(与 root 不同)权限问题很快变得明显。

【讨论】:

  • 完全有效。但我不确定为什么与 root 不同的用户会突然拥有更正确的权限?
猜你喜欢
  • 2012-04-09
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多