Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Empty zip archive: Couldn't find template for digesting: projects/repositories/archive

I have gitlab-ee self-hosted on my own server (running without a license). I'm using an existing nginx/passenger installation, and so I followed the instructions found here. I'm also using Let's encrypt to generate my own certificates and I've configured nginx to automatically redirect HTTP to HTTPS.

The installation generally works well, but I recently tried to download a repository as a zip file, but the zip file is always empty. Based on another forum post, I tried installing gitlab-workhorse, but this didn't solve the problem either.

Looking at the gitlab-rails/production.log file, I get the following error:

Started GET "/amrbekhit/repo-name/-/archive/master/repo-name-master.zip" for XX.XX.XX.XX at 2019-09-14 14:05:27 +0300
Processing by Projects::RepositoriesController#archive as ZIP
  Parameters: {"namespace_id"=>"amrbekhit", "project_id"=>"repo-name", "id"=>"master/repo-name-master"}
  Couldn't find template for digesting: projects/repositories/archive

Any thoughts as to what the problem could be?

Here is what the URL looks like:

https://gitlab.mysite.com/amrbekhit/repo-name/-/archive/master/hydra-takip-sistemi-master.zip

Here is my nginx config:

upstream gitlab-workhorse {
  server unix://var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0;
}

server {
        # HTTP to HTTPS redirect
        listen 80;
        listen [::]:80;

        server_name gitlab.mysite.com;
        rewrite ^ https://$server_name$request_uri permanent;
}


server {
  listen *:443 ssl;
  server_name gitlab.mysite.com;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  ssl_certificate /etc/letsencrypt/live/gitlab.mysite.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/gitlab.mysite.com/privkey.pem;

  client_max_body_size 250m;

  access_log  /var/log/gitlab/nginx/gitlab_access.log;
  error_log   /var/log/gitlab/nginx/gitlab_error.log;

  # Ensure Passenger uses the bundled Ruby version
  passenger_ruby /opt/gitlab/embedded/bin/ruby;

  # Correct the $PATH variable to included packaged executables
  passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin";

  # Make sure Passenger runs as the correct user and group to
  # prevent permission issues
  passenger_user git;
  passenger_group git;

  # Enable Passenger & keep at least one instance running at all times
  passenger_enabled on;
  passenger_min_instances 1;

  location ~ ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$ {
    # 'Error' 418 is a hack to re-use the @gitlab-workhorse block
    error_page 418 = @gitlab-workhorse;
    return 418;
  }

  location ~ ^/[\w\.-]+/[\w\.-]+/repository/archive {
    # 'Error' 418 is a hack to re-use the @gitlab-workhorse block
    error_page 418 = @gitlab-workhorse;
    return 418;
  }

  location ~ ^/api/v3/projects/.*/repository/archive {
    # 'Error' 418 is a hack to re-use the @gitlab-workhorse block
    error_page 418 = @gitlab-workhorse;
    return 418;
  }

  # Build artifacts should be submitted to this location
  location ~ ^/[\w\.-]+/[\w\.-]+/builds/download {
      client_max_body_size 0;
      # 'Error' 418 is a hack to re-use the @gitlab-workhorse block
      error_page 418 = @gitlab-workhorse;
      return 418;
  }

  # Build artifacts should be submitted to this location
  location ~ /ci/api/v1/builds/[0-9]+/artifacts {
      client_max_body_size 0;
      # 'Error' 418 is a hack to re-use the @gitlab-workhorse block
      error_page 418 = @gitlab-workhorse;
      return 418;
  }

  # Build artifacts should be submitted to this location
  location ~ /api/v4/jobs/[0-9]+/artifacts {
      client_max_body_size 0;
      # 'Error' 418 is a hack to re-use the @gitlab-workhorse block
      error_page 418 = @gitlab-workhorse;
      return 418;
  }


  # For protocol upgrades from HTTP/1.0 to HTTP/1.1 we need to provide Host header if its missing
  if ($http_host = "") {
  # use one of values defined in server_name
    set $http_host_with_default "gitlab.mysite.com";
  }

  if ($http_host != "") {
    set $http_host_with_default $http_host;
  }

  location @gitlab-workhorse {

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      3600;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    # Do not buffer Git HTTP responses
    proxy_buffering off;

    proxy_set_header    Host                $http_host_with_default;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;

    proxy_pass http://gitlab-workhorse;

    ## The following settings only work with NGINX 1.7.11 or newer
    #
    ## Pass chunked request bodies to gitlab-workhorse as-is
    # proxy_request_buffering off;
    # proxy_http_version 1.1;
  }

  ## Enable gzip compression as per rails guide:
  ## http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
  ## WARNING: If you are using relative urls remove the block below
  ## See config/application.rb under "Relative url support" for the list of
  ## other files that need to be changed for relative url support
  location ~ ^/(assets)/ {
    root /opt/gitlab/embedded/service/gitlab-rails/public;
    gzip_static on; # to serve pre-gzipped version
    expires max;
    add_header Cache-Control public;
  }

  error_page 502 /502.html;

  # Certbot
  location /.well-known {
      root /var/www/certbot;
  }
}
like image 710
Amr Bekhit Avatar asked Sep 22 '19 11:09

Amr Bekhit


1 Answers

In the end I figured it out - I was mistakenly using the Using an existing Passenger/NGINX installation rather than referring to Using a non-bundled web-server. The setup now works just fine.

like image 175
Amr Bekhit Avatar answered Sep 18 '22 14:09

Amr Bekhit