解决gitlab私有组中将项目可见性从私有更改为内部会导致500错误

问题

私有组中将项目可见性从私有更改为内部会导致500错误,查看日志报错信息为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Started GET "/app/ios-app" for 172.16.104.108 at 2019-04-16 15:49:10 +0800
Processing by ProjectsController#show as HTML
Parameters: {"namespace_id"=>"app", "id"=>"ios-app"}
Completed 500 Internal Server Error in 24ms (ActiveRecord: 2.1ms)
NoMethodError (undefined method `access_level' for nil:NilClass):
app/policies/project_policy.rb:336:in `feature_available?'
app/policies/project_policy.rb:76:in `block (2 levels) in <class:ProjectPolicy>'
lib/declarative_policy/condition.rb:21:in `instance_eval'
lib/declarative_policy/condition.rb:21:in `compute'
lib/declarative_policy/condition.rb:42:in `block in pass?'
lib/declarative_policy/base.rb:279:in `cache'
lib/declarative_policy/condition.rb:42:in `pass?'
lib/declarative_policy/rule.rb:79:in `pass?'
lib/declarative_policy/step.rb:79:in `pass?'
lib/declarative_policy/runner.rb:97:in `block in run'
lib/declarative_policy/runner.rb:167:in `block in steps_by_score'
lib/declarative_policy/runner.rb:145:in `loop'
lib/declarative_policy/runner.rb:145:in `steps_by_score'
lib/declarative_policy/runner.rb:78:in `run'
lib/declarative_policy/runner.rb:56:in `pass?'
lib/declarative_policy/base.rb:215:in `block in allowed?'
lib/declarative_policy/base.rb:215:in `each'
lib/declarative_policy/base.rb:215:in `all?'
lib/declarative_policy/base.rb:215:in `allowed?'
lib/declarative_policy/base.rb:207:in `can?'
app/models/ability.rb:48:in `allowed?'
app/controllers/application_controller.rb:133:in `can?'
app/controllers/projects_controller.rb:276:in `render_landing_page'
app/controllers/projects_controller.rb:109:in `block (2 levels) in show'
app/controllers/projects_controller.rb:106:in `show'
lib/gitlab/i18n.rb:46:in `with_locale'
lib/gitlab/i18n.rb:52:in `with_user_locale'
app/controllers/application_controller.rb:326:in `set_locale'
lib/gitlab/middleware/multipart.rb:93:in `call'
lib/gitlab/request_profiler/middleware.rb:14:in `call'
lib/gitlab/middleware/go.rb:17:in `call'
lib/gitlab/etag_caching/middleware.rb:11:in `call'
lib/gitlab/request_context.rb:18:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'

问题分析

具体可见:gitlab issues#37640

以上issues给出了解决方法

解决方法

这里gitlab使用了postgresql

  • 找到postgresql配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat /var/opt/gitlab/gitlab-rails/etc/database.yml
production:
adapter: postgresql
encoding: unicode
collation:
database: gitlabhq_production //数据库名
pool: 10
username: 'gitlab' //用户名
password:
host: '/var/opt/gitlab/postgresql' //主机
port: 5432
socket:
sslmode:
sslrootcert:
sslca:
  • 切换到postgresql用户登录数据库
1
2
3
4
su - gitlab-psql
psql -h /var/opt/gitlab/postgresql -d gitlabhq_production
psql (9.6.3)
Type "help" for help.
  • 查询出有问题的项目
1
2
3
4
5
gitlabhq_production=# SELECT id FROM projects WHERE id NOT IN (SELECT project_id AS id FROM project_features WHERE project_id is NOT NULL);
id
----
13
(2 rows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
gitlabhq_production=# SELECT * FROM projects WHERE id=13;
id | name | path | description | created_at | updated_at | creator_id | namespace_id | last_activity_at | import_url | visibility_level | archived | avatar | import_status | star_count | imp
ort_type | import_source | import_error | ci_id | shared_runners_enabled | runners_token | build_coverage_regex | build_allow_git_fetch | build_timeout | pending_delete | public_builds | last_repository_check_failed | last_reposit
ory_check_at | container_registry_enabled | only_allow_merge_if_pipeline_succeeds | has_external_issue_tracker | repository_storage | request_access_enabled | has_external_wiki | lfs_enabled | description_html | only_allow_merge_if_all_d
iscussions_are_resolved | printing_merge_request_link_enabled | auto_cancel_pending_pipelines | import_jid | cached_markdown_version | last_repository_updated_at | ci_config_path | delete_error
----+---------+---------+-------------+---------------------------+----------------------------+------------+--------------+----------------------------+------------+------------------+----------+--------+---------------+------------+----
---------+---------------+--------------+-------+------------------------+----------------------+----------------------+-----------------------+---------------+----------------+---------------+------------------------------+--------------
--------------+----------------------------+---------------------------------------+----------------------------+--------------------+------------------------+-------------------+-------------+------------------+--------------------------
------------------------+-------------------------------------+-------------------------------+------------+-------------------------+----------------------------+----------------+--------------
13 | ios-app | ios-app | | 2017-11-02 08:46:34.63874 | 2018-01-04 09:23:31.685174 | 1 | 12 | 2019-04-16 05:37:51.153648 | | 0 | f | | none | 0 |
| | | | t | 81SB9c9ft-X-oBMAvogi | | t | 3600 | f | t | f | 2019-04-04 00
:20:43.575553 | t | f | f | default | f | f | | | f
| t | 1 | | 2 | 2019-04-16 05:37:51.153648 | |
(1 row)
  • 插入缺失的行
1
insert into project_features(project_id,merge_requests_access_level,issues_access_level,wiki_access_level,snippets_access_level,builds_access_level,created_at,updated_at,repository_access_level) VALUES(改为对应的project_id,20,20,20,20,20,now(),now(),20);

问题解决,可正常访问使用项目

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器