gitlab-rake assets:precompile RAILS_ENV=production在执行时出现权限错误。

3

我在CentOS 7上成功安装了GitLab 7.7.2。

现在,我尝试以子目录样式运行GitLab,例如http://url/gitlab

我查看了这个文件并按照指示进行了更改:/opt/gitlab/embedded/service/gitlab-rails/config。

然后,我进行了预编译,但出现了错误。

# gitlab-rake assets:precompile RAILS_ENV=production
I, [2015-02-27T17:35:18.980208 #4864]  INFO -- : Writing /opt/gitlab/embedded/service/gitlab-rails/public/assets/authbuttons/github_32-199ebcd7adccbfe20068d39bfd57e6bf.png
rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/public/assets/authbuttons/github_32-199ebcd7adccbfe20068d39bfd57e6bf.png+

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

我该怎么办?

3个回答

6

这篇文章描述了一个不错的解决方法。类似于user Perceval FARAMAZ建议的那样,我们可以暂时打开权限以编译新的和更改的资源,然后再关闭它们。

通过使用ACL而不是标准位,这仅针对git用户完成,而且实际上没有改变所有权从root:root

# ... hack on CSS ...

# Need to let user `git` write to assets/ because gitlab-rake tries to write
# to it as `git`, while `assets/` is owned by root.
apt-get install acl
setfacl -R -m u:git:rwX /opt/gitlab/embedded/service/gitlab-rails/public/assets/
gitlab-rake assets:precompile RAILS_ENV=production
chmod -R a+rX /opt/gitlab/embedded/service/gitlab-rails/public/assets/

# Remove git's write access
setfacl -R -x u:git /opt

这适用于添加新图像和更改现有资产。

很好的答案,对我帮助很大。谢谢。 - MWiesner

3

chmod -R 1777 /opt/gitlab/embedded/service/gitlab-rails/public/assets 对我很有用。

它为所有人设置完全的读/写/执行权限,并在“t”上设置粘滞位(除了根目录/文件所有者,没有人可以删除该目录,从而允许rake完成其工作)。


向所有人开放权限是一个安全问题。安装/更改后,请再次关闭权限。 - cfi

1
首先,直接更改文件将导致它们在重新配置后被重写。调用 gitlab-rake 时,您不必声明 RAILS_ENV,因为 gitlab-rake 包装器已经处理了它。
现在就相对 URL 选项而言,它尚未在 Omnibus 包中实现。

1
我修改了4个文件,分别是gitlab.yml.erb、unicorn.rb.erb、gitlab-shell-config.yml.erb和nginx-gitlab-http.conf.erb,它们位于/opt/gitlab/embedded/cookbooks/gitlab/templates/default目录下。gitlab.yml.erb ----- 添加 "relative_url_root: /gitlab"unicorn.rb.erb ----- 添加 "ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab""gitlab-shell-config.yml.erb ----- 修改 "gitlab_url: "<%= @api_url %>/gitlab/""nginx-gitlab-http.conf.erb ----- 修改 "location /gitlab {"然后,我重新配置,最终得到了子目录。 - Shoji Urashita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接