Probleme nach Update von GitLab 7.4

Nach dem Update von GitLab 7.2 auf 7.4.3 traten Probleme auf, die jedoch relativ schnell gelöst werden konnten.

Wurde der PostgreSQL Dienst während des Updates auch angehalten, erfolgt die Migration der Datenbank nicht. Auch ein Starten des Dienstes und ein erneutes ausführen von gitlab-ctl reconfigure brachte keine Besserung. Nach dem Start aller Dienste wurde im Browser immer ein "Internal Server Error" angezeigt. Daraufhin ließ sich in der Log-Datei "/var/log/gitlab/gitlab-rails/production.log" folgende Fehlermeldung finden.

Completed 500 Internal Server Error in 11ms

ActiveRecord::StatementInvalid (PG::Error: ERROR:  relation "members" does not exist
LINE 5:                WHERE a.attrelid = '"members"'::regclass
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
                FROM pg_attribute a LEFT JOIN pg_attrdef d
                  ON a.attrelid = d.adrelid AND a.attnum = d.adnum
               WHERE a.attrelid = '"members"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum
):
  app/models/user.rb:295:in `authorized_projects'
  app/controllers/dashboard_controller.rb:77:in `load_projects'

Die Überprüfung der Datenbankversion ergab, wie nachfolgend zu sehen, den Wert "20140730111702" dieser müsste jedoch für GitLab 7.4.3 "20141007100818" entsprechen. Dies ließ vermuten, dass die Migration der Datenbank nicht oder nur teilweise durchgeführt wurde.

$ sudo gitlab-rails console
Loading production environment (Rails 4.1.1)
irb(main):001:0> ActiveRecord::Migrator.current_version
=> 20140730111702
irb(main):002:0>

Um die Migration manuelle durchzuführen müssen, wie in der Dokumentation beschrieben, zunächst zwei Dienste gestoppt werden.

$ sudo gitlab-ctl stop unicorn
$ sudo gitlab-ctl stop sidekiq

Die Ausgabe des Status aller GitLab Dienste ergab folgendes Bild. Zu beachten ist, das der PostgreSQL Dienst auf jeden Fall laufen muss.

$ sudo gitlab-ctl status
run: logrotate: (pid 612) 572s; run: log: (pid 608) 572s
run: nginx: (pid 611) 572s; run: log: (pid 606) 572s
run: postgresql: (pid 609) 572s; run: log: (pid 601) 572s
run: redis: (pid 605) 572s; run: log: (pid 602) 572s
down: sidekiq: 4s, normally up; run: log: (pid 603) 572s
down: unicorn: 27s, normally up; run: log: (pid 604) 572s

GitLab bietet die Möglichkeit die Anwendung auf mögliche Fehler zu prüfen. Dieser Test wurde durchgeführt und förderte eine ähnliche Fehlermeldung wie bereits in der Log-Datei gefunden zu Tage.

$ sudo gitlab-rake gitlab:app:check
Checking GitLab ...

Database config exists? ... yes
Database is SQLite ... no
All migrations up? ... no
  Try fixing it:
  sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
  Please fix the error above and rerun the checks.
Database contains orphaned GroupMembers? ... rake aborted!
ActiveRecord::StatementInvalid: PG::Error: ERROR:  relation "members" does not exist
LINE 5:                WHERE a.attrelid = '"members"'::regclass
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
                FROM pg_attribute a LEFT JOIN pg_attrdef d
                  ON a.attrelid = d.adrelid AND a.attnum = d.adnum
               WHERE a.attrelid = '"members"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum

PG::Error: ERROR:  relation "members" does not exist
LINE 5:                WHERE a.attrelid = '"members"'::regclass
                                          ^

Tasks: TOP => gitlab:app:check
(See full trace by running task with --trace)

Die nötige Migration der Datenbank kann mit folgendem Befehl manuell ausgeführt werden und führt zu folgender gekürzten Ausgabe.

$ sudo gitlab-rake db:migrate RAILS_ENV=production
== 20140903115954 MigrateToNewShell: migrating ================================
Repositories updated with new hooks
== 20140903115954 MigrateToNewShell: migrated (1.0443s) =======================
[...]

Nachdem die Migration ohne Fehlermeldungen durchgelaufen ist, wurden alle zu GitLab gehörenden Dienste neu gestartet.

$ sudo gitlab-ctl restart

Anschließend konnte GitLab wieder ohne Probleme über die Web-Oberfläche aufgerufen werden.

Verwandte Artikel