V8-archive: InvalidProjectException raised when `DIRECTUS_USE_ENV=1`

Created on 6 Sep 2019  路  16Comments  路  Source: directus/v8-archive

Bug Report

Steps to Reproduce

  1. Run API with DIRECTUS_USE_ENV=1 and other env. variables as required for Docker
  2. Do any operation through APP (e.g. create collection)

Expected Behavior

Collection gets created without issues.

Actual Behavior

Collection gets created but an error is raised (possibly when adding this to audit log)

Other Context & Screenshots

Exception:

api[_].ERROR: Directus\Config\Exception\InvalidProjectException: Current configuration context only supports default project name (_) in /var/www/src/helpers/app.php:95
api_1       | Stack trace:
api_1       | #0 /var/www/src/core/Directus/Util/DateTimeUtils.php(112): Directus\get_project_config                                                                                                                                                                                                                                              api_1       | directus/api#1 /var/www/src/core/Directus/Database/TableGateway/RelationalTableGateway.php(2526): Directus\Util\DateTimeUtils::nowInTimezone
api_1       | directus/api#2 /var/www/src/core/Directus/Database/TableGateway/RelationalTableGateway.php(440): Directus\Database\TableGateway\RelationalTableGateway->recordActivity
api_1       | directus/api#3 /var/www/src/core/Directus/Services/ItemsService.php(54): Directus\Database\TableGateway\RelationalTableGateway->createRecord                                                                                                                                                                                                    api_1       | directus/api#4 /var/www/src/endpoints/Items.php(69): Directus\Services\ItemsService->createItem                                                                                                                                                                                                                                                 api_1       | directus/api#5 [internal function]: Directus\Api\Routes\Items->create                                                                                                                                                                                                                                                                           api_1       | directus/api#6 /var/www/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(40): call_user_func                                                                                                                                                                                                                                       api_1       | directus/api#7 /var/www/vendor/slim/slim/Slim/Route.php(281): Slim\Handlers\Strategies\RequestResponse->__invoke                                                                                                                                                                                                                                api_1       | directus/api#8 /var/www/src/core/Directus/Application/Http/Middleware/AbstractRateLimitMiddleware.php(34): Slim\Route->__invoke                                                                                                                                                                                                                 api_1       | directus/api#9 [internal function]: Directus\Application\Http\Middleware\AbstractRateLimitMiddleware->__invoke                                                                                                                                                                                                                                  api_1       | directus/api#10 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#11 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#12 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#13 /var/www/src/core/Directus/Application/Http/Middleware/AuthenticationMiddleware.php(120): Slim\Route->Slim\{closure}                                                                                                                                                                                                            api_1       | directus/api#14 [internal function]: Directus\Application\Http\Middleware\AuthenticationMiddleware->__invoke                                                                                                                                                                                                                                    api_1       | directus/api#15 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#16 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#17 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#18 /var/www/src/core/Directus/Application/Http/Middleware/TableGatewayMiddleware.php(25): Slim\Route->Slim\{closure}                                                                                                                                                                                                               api_1       | directus/api#19 [internal function]: Directus\Application\Http\Middleware\TableGatewayMiddleware->__invoke                                                                                                                                                                                                                                      api_1       | directus/api#20 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#21 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#22 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#23 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->Slim\{closure}                                                                                                                                                                                                                                        api_1       | directus/api#24 /var/www/vendor/slim/slim/Slim/Route.php(268): Slim\Route->callMiddlewareStack                                                                                                                                                                                                                                                  api_1       | directus/api#25 /var/www/vendor/slim/slim/Slim/App.php(503): Slim\Route->run                                                                                                                                                                                                                                                                    api_1       | directus/api#26 /var/www/src/core/Directus/Application/Http/Middleware/AbstractRateLimitMiddleware.php(34): Slim\App->__invoke                                                                                                                                                                                                                  api_1       | directus/api#27 [internal function]: Directus\Application\Http\Middleware\AbstractRateLimitMiddleware->__invoke                                                                                                                                                                                                                                 api_1       | directus/api#28 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#29 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#30 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#31 /var/www/vendor/directus/proxy-detection/src/ProxyDetectionMiddleware.php(30): Slim\App->Slim\{closure}                                                                                                                                                                                                                         api_1       | directus/api#32 /var/www/src/core/Directus/Application/Http/Middleware/ProxyMiddleware.php(18): RKA\Middleware\ProxyDetectionMiddleware->__invoke                                                                                                                                                                                               api_1       | directus/api#33 [internal function]: Directus\Application\Http\Middleware\ProxyMiddleware->__invoke                                                                                                                                                                                                                                             api_1       | directus/api#34 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#35 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#36 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#37 /var/www/vendor/akrabat/ip-address-middleware/src/IpAddress.php(113): Slim\App->Slim\{closure}                                                                                                                                                                                                                                  api_1       | directus/api#38 [internal function]: RKA\Middleware\IpAddress->__invoke                                                                                                                                                                                                                                                                         api_1       | directus/api#39 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#40 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#41 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#42 /var/www/src/core/Directus/Application/Http/Middleware/CorsMiddleware.php(66): Slim\App->Slim\{closure}                                                                                                                                                                                                                         api_1       | directus/api#43 [internal function]: Directus\Application\Http\Middleware\CorsMiddleware->__invoke                                                                                                                                                                                                                                              api_1       | directus/api#44 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#45 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#46 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#47 /var/www/src/core/Directus/Application/Http/Middleware/ResponseCacheMiddleware.php(54): Slim\App->Slim\{closure}                                                                                                                                                                                                                api_1       | directus/api#48 [internal function]: Directus\Application\Http\Middleware\ResponseCacheMiddleware->__invoke                                                                                                                                                                                                                                     api_1       | directus/api#49 /var/www/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array                                                                                                                                                                                                                                                   api_1       | directus/api#50 [internal function]: Slim\DeferredCallable->__invoke                                                                                                                                                                                                                                                                            api_1       | directus/api#51 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func                                                                                                                                                                                                                                                     api_1       | directus/api#52 /var/www/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}                                                                                                                                                                                                                                          api_1       | directus/api#53 /var/www/vendor/slim/slim/Slim/App.php(392): Slim\App->callMiddlewareStack                                                                                                                                                                                                                                                      api_1       | directus/api#54 /var/www/vendor/slim/slim/Slim/App.php(297): Slim\App->process                                                                                                                                                                                                                                                                  api_1       | directus/api#55 /var/www/src/core/Directus/Application/Application.php(161): Slim\App->run                                                                                                                                                                                                                                                      api_1       | directus/api#56 /var/www/public/index.php(5): Directus\Application\Application->run [] []                

Apparently the issue is that when calling app::get_project_config with default arguments from DateTimeUtils::nowInTimezone it does not work, as it should be used with default project name _.

Technical Details

  • Device: Docker, Windows WSL2 ...
  • OS: [eg: MacOS 10.13.6, Windows 10.1803]
  • Web Server: Apache in Docker
  • PHP Version: [eg: 7.2.0]
  • Database: [eg: MySQL 8.0.12]
  • Install Method: reproduced in master and visible also in develop
bug

All 16 comments

It's not replicate in API. Thus it's a Docker specific issue.

I have the same issue, I just upgraded the docker image and updated my docker-compose file like in the simple https://github.com/directus/docker/blob/develop/examples/simple.yaml

Then when I try to upload a file or any other collections, I have the error:
"Current configuration context only supports default project name"

As Martin said:

This is due to a timezone config fetch that doesn't pass the project name. I've set a default for that specific value and another place that does the same call.

Thank you for the fix. When the new docker image will be avalable ?

On next release

do you have a release date?

Most likely tomorrow

I see that you updated docker images directus/base and directus/core.
Are you also going to update directus/app and directus/api ?

base and core updates doesn't follow the 15 day release schedule. api and app are updated only when a new release is made, so we'll need to wait for them to be released

Thanks for the update !
Any workaround in the meantime ?

Thanks for the update !
Any workaround in the meantime ?

Maybe you can set DIRECTUS_USE_ENV: 0 and mount you config/app.php to docker container manually.

@everyx
I tried this. Maybe I'm missing someting.

image

Would setting the timezone manually solve the issue ?

EDIT: I can provide the config if needed

How's your config file structure? If your DIRECTUS_USE_ENV is already set to "0" in environment, it should work just fine

@wiwski what problem are you getting? The exact same as the OP issue?

@WoLfulus it's not exactly the same.

Here are the steps that led me to the problem:

  1. Added a file field to a collection. Led to errors. Creation of new fields would faild with a mysql error message from the API.
  2. I decided to upgrade my docker images:
  3. I connected to the api containter and ran bin/directus install:config -n <database-name> -u <mysql-user> -p <mysql-password> and then bin/directus db:upgrade.
  4. When I try to edit anything from the app I get the error Current configuration context only supports default project name (_)

Here are the environment variables in my docker-compose.yml:

    environment:
      # Load balancer
      VIRTUAL_HOST: "my.host.com"

      # App
      DIRECTUS_APP_ENV: "development"
      DIRECTUS_APP_TIMEZONE: "Europe/Paris"

      # These are now required, make sure to always set
      # to something unique while in production
      DIRECTUS_AUTH_PUBLICKEY: "public"
      DIRECTUS_AUTH_SECRETKEY: "secret"

      # Database
      DIRECTUS_DATABASE_HOST: ***
      DIRECTUS_DATABASE_PORT: "***"
      DIRECTUS_DATABASE_NAME: "***"
      DIRECTUS_DATABASE_USERNAME: "***"
      DIRECTUS_DATABASE_PASSWORD: "***"

You didn't set DIRECTUS_USE_ENV to 0 on your environment vars.
The workaround was to set it to 0 and mount the config folder to an external source.

I'd say you just wait for the next release, this should be fixed.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

cdwmhcc picture cdwmhcc  路  3Comments

cdwmhcc picture cdwmhcc  路  3Comments

binary-koan picture binary-koan  路  3Comments

ondronix picture ondronix  路  3Comments

maettyhawk picture maettyhawk  路  3Comments