Randomly receiving Exception "Incorrect HOST_YVES config"


#1

Hi there,

I am working my way into Spryker at the moment coding the “Architectural Walkthrough” tutorial using the Spryker Suite. However, sometimes I randomly receive the following Exception when refreshing my /hello-spryker page in Yves:

YVES Exception
    Spryker\Shared\ZedRequest\Client\Exception\RequestException - Server error: `POST http://zed.de.suite.local/hello-spryker/gateway/get-reversed-string` resulted in a `500 Internal Server Error` response:
YVES Exception
    Spryker\Yves\Application\Plugin\Exception\InvalidUrlConfigurationException - Incorrect HOST_YVES config, expected `zed.de.suite.local`, got `www.de.suite.local`. Set the URLs in your Shared/config_default_DE.php or env specific config files.
    in /data/shop/development/current/vendor/spryker/application/src/Spryker/Yves/Application/Plugin/ServiceProvider/AssertUrlConfigurationServiceProvider.php (62) 

My Shared/config_default_DE.php looks like this:

$domain = getenv('VM_PROJECT') ?: 'suite';

// ---------- Yves host
$config[ApplicationConstants::HOST_YVES] = sprintf('www.de.%s.local', $domain);
$config[ApplicationConstants::PORT_YVES] = '';
$config[ApplicationConstants::PORT_SSL_YVES] = '';
$config[ApplicationConstants::BASE_URL_YVES] = sprintf(
    'http://%s%s',
    $config[ApplicationConstants::HOST_YVES],
    $config[ApplicationConstants::PORT_YVES]
);
$config[ApplicationConstants::BASE_URL_SSL_YVES] = sprintf(
    'https://%s%s',
    $config[ApplicationConstants::HOST_YVES],
    $config[ApplicationConstants::PORT_SSL_YVES]
);
$config[ProductManagementConstants::BASE_URL_YVES] = $config[ApplicationConstants::BASE_URL_YVES];
$config[PayolutionConstants::BASE_URL_YVES] = $config[ApplicationConstants::BASE_URL_YVES];
$config[NewsletterConstants::BASE_URL_YVES] = $config[ApplicationConstants::BASE_URL_YVES];
$config[CustomerConstants::BASE_URL_YVES] = $config[ApplicationConstants::BASE_URL_YVES];

// ---------- Zed host
$config[ApplicationConstants::HOST_ZED] = sprintf('zed.de.%s.local', $domain);
$config[ApplicationConstants::PORT_ZED] = '';
$config[ApplicationConstants::PORT_SSL_ZED] = '';
$config[ApplicationConstants::BASE_URL_ZED] = sprintf(
    'http://%s%s',
    $config[ApplicationConstants::HOST_ZED],
    $config[ApplicationConstants::PORT_ZED]
);
$config[ApplicationConstants::BASE_URL_SSL_ZED] = sprintf(
    'https://%s%s',
    $config[ApplicationConstants::HOST_ZED],
    $config[ApplicationConstants::PORT_SSL_ZED]
);
$config[ZedRequestConstants::HOST_ZED_API] = $config[ApplicationConstants::HOST_ZED];
$config[ZedRequestConstants::BASE_URL_ZED_API] = $config[ApplicationConstants::BASE_URL_ZED];
$config[ZedRequestConstants::BASE_URL_SSL_ZED_API] = $config[ApplicationConstants::BASE_URL_SSL_ZED];

// ---------- Assets / Media
$config[ApplicationConstants::BASE_URL_STATIC_ASSETS] = $config[ApplicationConstants::BASE_URL_YVES];
$config[ApplicationConstants::BASE_URL_STATIC_MEDIA] = $config[ApplicationConstants::BASE_URL_YVES];
$config[ApplicationConstants::BASE_URL_SSL_STATIC_ASSETS] = $config[ApplicationConstants::BASE_URL_SSL_YVES];
$config[ApplicationConstants::BASE_URL_SSL_STATIC_MEDIA] = $config[ApplicationConstants::BASE_URL_SSL_YVES];

// ---------- Session
$config[SessionConstants::YVES_SESSION_COOKIE_NAME] = $config[ApplicationConstants::HOST_YVES];
$config[SessionConstants::YVES_SESSION_COOKIE_DOMAIN] = $config[ApplicationConstants::HOST_YVES];
$config[SessionConstants::ZED_SESSION_COOKIE_NAME] = $config[ApplicationConstants::HOST_ZED];

// ---------- Events
$config[EventConstants::LOG_FILE_PATH] = APPLICATION_ROOT_DIR . '/data/DE/logs/application_events.log';

So for me everything looks fine and if I refresh the page, the exception is gone again. Do you have any hint on where I can search for the cause of these errors?

Thanks,

Moritz


#2

Hi Moritz,

Does your config have $domain = getenv('VM_PROJECT') ?: 'suite-nonsplit'; entry before the part that you provided?

Best regards,
Valerii


#3

Argh — sorry. I’ve missed that line when copying the config over. I have updated the config in my earlier post to match with the original and added the following line: $domain = getenv('VM_PROJECT') ?: 'suite';


#4

Hi @mmaedler ,

To me this issue looks like OpCache of the PHP server.
Please restart FPM:
sudo -i bash -c "systemctl restart php7.1-fpm.service"

Also, you may want to disable OpCache:
sudo -i bash -c "phpdismod opcache"

Last hint - please make sure that configuration file you’re changing contains changes inside VM.

Andrey


#5

Thanks @Andrey_Tkachenko for your quick response.
I have checked the PHP Info page in ZED and it looks like, OpCache is not even enabled in my stack. So I guess that makes it not being responsible for the weird behaviour.
I have also double-checked the config file on the virtual machines filesystem and it matches exactly what I see on the host machine. Any other Ideas?


#6

Hi Moritz,

Does it happen only for your hello_spryker page or for any other page in the shop as well?

Best regards,
Valerii


#7

Hi Valerii,

I cannot say for sure since it happens only randomly and apart from the hello-spryker page the system does not have any further pages. But it does not happen on the homepage nor does it happen in zed. My feeling is, that it happens because of the communication yves<>zed is somehow sometimes not working.
However, the responses I see when it is working indicate they are served directly from zed (I have added a timestamp to the returned reversed string).

Any clues?

Thanks!


#8

POST http://zed.de.suite.local/hello-spryker/… and …/Spryker/Yves/Application/Plugin/… — how did you manage to use Yves plugins in Zed?


#9

Hi Darius,

thanks for your reply. Would you mind elaborating a bit more — I am not sure if I understand what you want me to do/post.

Regarding “how did you manage to use Yves plugins in Zed”: I am not using an Yves plugin in Zed, but the other way round. What I meant was that I neither see the error on other pages in Yves nor on other pages in Zed.

Thanks!


#10

Hello, Moritz,

To understand the reason of exception, full trace would be more useful. Or at least tell which steps from tutorial were done successfully, and at which step you are stuck now.

Most probably, layers or namespaces are mixed.

— Darius


#11

Hi Darius,

sorry for not getting back on this earlier.
I concluded the architectural walkthrough steps 1 and 2. You’ll find a complete trace here: https://gist.github.com/mmaedler/f5ba9ca44e68ddc691fd3558b017190e

As said, the exception appears randomly.

Thanks,

Moritz


#12

Hi, Moritz,

As I see from the given stack trace, you get several “AMQPProtocolConnectionException: ACCESS_REFUSED” cases.

I would suggest to re-check these cases.

  1. you need to create/assign your rabbitmq user to your custom vhost, otherwise you will have no access:
    // ---------- RabbitMQ
    $config[RabbitMqConstants::RABBITMQ_USERNAME] = ‘DE_development’;
    $config[RabbitMqConstants::RABBITMQ_VIRTUAL_HOST] = ‘/DE_development_zed’;

  2. check the acl for your rabbit-mq here: http://zed.de.demoshop.local:15672/#/users

Could be that rabbit-mq access problems and uncatched exceptions break other places, thus incorrectly reporting about “HOST_YVES”

Tell me if this helps :~)

— Darius


#13

Hi Darius,

thanks again for your reply. I have checked what you’ve told me to and it turned out the rabbitmq user wasn’t properly created. I did that now, but the error — less often now, but still —persists.
In the updated exception you’ll see the AMQPProtocolException is now missing, but the original exception is still the same: https://gist.github.com/mmaedler/04d1b475e1fda882b3638160fa155e11

Thanks,

Moritz


#14

Hi, Moritz,

Good that you fixed rabbitmq issue. Back to the original problem… as far as I see from log trace, AssertUrlConfigurationServiceProvider plugin is complaining about configuration. Your config file, provided in the beginning, looks normal.

In fact, there are two plugins with the same AssertUrlConfigurationServiceProvider name:

  1. Spryker\Zed\Application\Communication\Plugin\ServiceProvider\AssertUrlConfigurationServiceProvider (check your \Pyz\Zed\Application\ApplicationDependencyProvider — there shout not be any use statements with Spryker\Yves)
  2. Spryker\Yves\Application\Plugin\ServiceProvider\AssertUrlConfigurationServiceProvider (check your \Pyz\Yves\Application\YvesBootstrap — there shout not be any use statements with Spryker\Zed)

I have an impression that some of plugins are used in wrong layer

Keep us informed about your successes and failures :~)

— Darius


#15

Mhh I checked your suggestion and neither in \Pyz\Zed\Application\ApplicationDependencyProvider nor in \Pyz\Yves\ShopApplication\YvesBootstrap.php a package from the other layer is used.

// \Pyz\Zed\Application\ApplicationDependencyProvider:

use Silex\Provider\HttpFragmentServiceProvider;
use Silex\Provider\ServiceControllerServiceProvider;
use Silex\Provider\SessionServiceProvider;
use Silex\Provider\TwigServiceProvider;
use Spryker\Service\UtilDateTime\ServiceProvider\DateTimeFormatterServiceProvider;
use Spryker\Shared\Application\ServiceProvider\FormFactoryServiceProvider;
use Spryker\Shared\Config\Environment;
use Spryker\Shared\ErrorHandler\Plugin\ServiceProvider\WhoopsErrorHandlerServiceProvider;
use Spryker\Zed\Acl\Communication\Plugin\Bootstrap\AclBootstrapProvider;
use Spryker\Zed\Api\Communication\Plugin\ApiServiceProviderPlugin;
use Spryker\Zed\Api\Communication\Plugin\ServiceProvider\ApiRoutingServiceProvider;
use Spryker\Zed\Application\ApplicationDependencyProvider as SprykerApplicationDependencyProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\AssertUrlConfigurationServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\EnvironmentInformationServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\KernelLogServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\MvcRoutingServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\RequestServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\RoutingServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\SilexRoutingServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\SslServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\SubRequestServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\TranslationServiceProvider;
use Spryker\Zed\Application\Communication\Plugin\ServiceProvider\ZedHstsServiceProvider;
use Spryker\Zed\Assertion\Communication\Plugin\ServiceProvider\AssertionServiceProvider;
use Spryker\Zed\Auth\Communication\Plugin\Bootstrap\AuthBootstrapProvider;
use Spryker\Zed\Auth\Communication\Plugin\ServiceProvider\RedirectAfterLoginProvider;
use Spryker\Zed\Currency\Communication\Plugin\ServiceProvider\TwigCurrencyServiceProvider;
use Spryker\Zed\EventBehavior\Communication\Plugin\ServiceProvider\EventBehaviorServiceProvider;
use Spryker\Zed\Gui\Communication\Plugin\ServiceProvider\GuiTwigExtensionServiceProvider;
use Spryker\Zed\Kernel\Container;
use Spryker\Zed\Messenger\Communication\Plugin\ServiceProvider\MessengerServiceProvider;
use Spryker\Zed\Money\Communication\Plugin\ServiceProvider\TwigMoneyServiceProvider;
use Spryker\Zed\NewRelic\Communication\Plugin\ServiceProvider\NewRelicRequestTransactionServiceProvider;
use Spryker\Zed\Propel\Communication\Plugin\ServiceProvider\PropelServiceProvider;
use Spryker\Zed\Session\Communication\Plugin\ServiceProvider\SessionServiceProvider as SprykerSessionServiceProvider;
use Spryker\Zed\Twig\Communication\Plugin\ServiceProvider\TwigServiceProvider as SprykerTwigServiceProvider;
use Spryker\Zed\User\Communication\Plugin\ServiceProvider\UserServiceProvider;
use Spryker\Zed\WebProfiler\Communication\Plugin\ServiceProvider\WebProfilerServiceProvider;
use Spryker\Zed\ZedNavigation\Communication\Plugin\ServiceProvider\ZedNavigationServiceProvider;
use Spryker\Zed\ZedRequest\Communication\Plugin\GatewayServiceProviderPlugin;

and

// \Pyz\Yves\ShopApplication\YvesBootstrap.php:

use Pyz\Yves\ExampleProductSalePage\Plugin\Provider\ExampleProductSaleControllerProvider;
use Pyz\Yves\HelloSpryker\Plugin\Provider\HelloSprykerControllerProvider;
use Pyz\Yves\HelloWorld\Plugin\Provider\HelloWorldControllerProvider;
use Silex\Provider\FormServiceProvider;
use Silex\Provider\HttpFragmentServiceProvider;
use Silex\Provider\RememberMeServiceProvider;
use Silex\Provider\SecurityServiceProvider;
use Silex\Provider\ServiceControllerServiceProvider;
use Silex\Provider\SessionServiceProvider;
use Silex\Provider\ValidatorServiceProvider;
use Spryker\Service\UtilDateTime\ServiceProvider\DateTimeFormatterServiceProvider;
use Spryker\Shared\Application\ServiceProvider\FormFactoryServiceProvider;
use Spryker\Shared\Application\ServiceProvider\HeadersSecurityServiceProvider;
use Spryker\Shared\Application\ServiceProvider\RoutingServiceProvider;
use Spryker\Shared\Application\ServiceProvider\UrlGeneratorServiceProvider;
use Spryker\Shared\Config\Environment;
use Spryker\Yves\Application\Plugin\Provider\CookieServiceProvider;
use Spryker\Yves\Application\Plugin\Provider\YvesHstsServiceProvider;
use Spryker\Yves\Application\Plugin\ServiceProvider\AssertUrlConfigurationServiceProvider;
use Spryker\Yves\Application\Plugin\ServiceProvider\KernelLogServiceProvider;
use Spryker\Yves\Application\Plugin\ServiceProvider\SslServiceProvider;
use Spryker\Yves\CmsContentWidget\Plugin\CmsContentWidgetServiceProvider;
use Spryker\Yves\Messenger\Plugin\Provider\FlashMessengerServiceProvider;
use Spryker\Yves\NewRelic\Plugin\ServiceProvider\NewRelicRequestTransactionServiceProvider;
use Spryker\Yves\Session\Plugin\ServiceProvider\SessionServiceProvider as SprykerSessionServiceProvider;
use Spryker\Yves\Storage\Plugin\Provider\StorageCacheServiceProvider;
use Spryker\Yves\Twig\Plugin\ServiceProvider\TwigServiceProvider as SprykerTwigServiceProvider;
use Spryker\Yves\ZedRequest\Plugin\ServiceProvider\ZedRequestHeaderServiceProvider;
use Spryker\Yves\ZedRequest\Plugin\ServiceProvider\ZedRequestLogServiceProvider;
use SprykerShop\Yves\CalculationPage\Plugin\Provider\CalculationPageControllerProvider;
use SprykerShop\Yves\CartNoteWidget\Plugin\Provider\CartNoteWidgetControllerProvider;
use SprykerShop\Yves\CartPage\Plugin\Provider\CartControllerProvider;
use SprykerShop\Yves\CartPage\Plugin\Provider\CartServiceProvider;
use SprykerShop\Yves\CartToShoppingListWidget\Plugin\Provider\CartToShoppingListWidgetControllerProvider;
use SprykerShop\Yves\CatalogPage\Plugin\Provider\CatalogPageControllerProvider;
use SprykerShop\Yves\CatalogPage\Plugin\Provider\CatalogPageTwigServiceProvider;
use SprykerShop\Yves\CategoryWidget\Plugin\Provider\CategoryServiceProvider;
use SprykerShop\Yves\CheckoutPage\Plugin\Provider\CheckoutPageControllerProvider;
use SprykerShop\Yves\CmsBlockWidget\Plugin\Provider\CmsBlockTwigFunctionServiceProvider;
use SprykerShop\Yves\CmsPage\Plugin\Provider\CmsTwigFunctionServiceProvider;
use SprykerShop\Yves\CmsPage\Plugin\Provider\PreviewControllerProvider;
use SprykerShop\Yves\CompanyPage\Plugin\Provider\CompanyPageControllerProvider;
use SprykerShop\Yves\CurrencyWidget\Plugin\Provider\CurrencyWidgetControllerProvider;
use SprykerShop\Yves\CustomerPage\Plugin\Provider\CustomerPageControllerProvider;
use SprykerShop\Yves\CustomerPage\Plugin\Provider\CustomerSecurityServiceProvider;
use SprykerShop\Yves\CustomerPage\Plugin\Provider\CustomerTwigFunctionServiceProvider;
use SprykerShop\Yves\CustomerReorderWidget\Plugin\Provider\CustomerReorderControllerProvider;
use SprykerShop\Yves\DiscountWidget\Plugin\Provider\DiscountWidgetControllerProvider;
use SprykerShop\Yves\ErrorPage\Plugin\Provider\ErrorPageControllerProvider;
use SprykerShop\Yves\ErrorPage\Plugin\Provider\ErrorPageServiceProvider;
use SprykerShop\Yves\HeartbeatPage\Plugin\Provider\HeartbeatPageControllerProvider;
use SprykerShop\Yves\HomePage\Plugin\Provider\HomePageControllerProvider;
use SprykerShop\Yves\MoneyWidget\Plugin\ServiceProvider\TwigMoneyServiceProvider;
use SprykerShop\Yves\MultiCartPage\Plugin\Provider\MultiCartPageControllerProvider;
use SprykerShop\Yves\NewsletterPage\Plugin\Provider\NewsletterPageControllerProvider;
use SprykerShop\Yves\NewsletterWidget\Plugin\Provider\NewsletterWidgetControllerProvider;
use SprykerShop\Yves\PriceWidget\Plugin\Provider\PriceControllerProvider;
use SprykerShop\Yves\ProductNewPage\Plugin\Provider\ProductNewPageControllerProvider;
use SprykerShop\Yves\ProductReviewWidget\Plugin\Provider\ProductReviewControllerProvider;
use SprykerShop\Yves\ProductSetListPage\Plugin\Provider\ProductSetListPageControllerProvider;
use SprykerShop\Yves\QuickOrderPage\Plugin\Provider\QuickOrderPageControllerProvider;
use SprykerShop\Yves\SharedCartPage\Plugin\Provider\SharedCartPageControllerProvider;
use SprykerShop\Yves\ShopApplication\Plugin\Provider\AutoloaderCacheServiceProvider;
use SprykerShop\Yves\ShopApplication\Plugin\Provider\ShopApplicationServiceProvider;
use SprykerShop\Yves\ShopApplication\Plugin\Provider\ShopTwigServiceProvider;
use SprykerShop\Yves\ShopApplication\Plugin\Provider\WidgetServiceProvider;
use SprykerShop\Yves\ShopApplication\Plugin\Provider\YvesExceptionServiceProvider;
use SprykerShop\Yves\ShopApplication\Plugin\Provider\YvesSecurityServiceProvider;
use SprykerShop\Yves\ShopApplication\YvesBootstrap as SprykerYvesBootstrap;
use SprykerShop\Yves\ShopPermission\Plugin\Provider\ShopPermissionServiceProvider;
use SprykerShop\Yves\ShoppingListPage\Plugin\Provider\ShoppingListPageControllerProvider;
use SprykerShop\Yves\ShoppingListWidget\Plugin\Provider\ShoppingListWidgetControllerProvider;
use SprykerShop\Yves\ShopRouter\Plugin\Router\SilexRouter;
use SprykerShop\Yves\ShopRouter\Plugin\Router\StorageRouter;
use SprykerShop\Yves\ShopTranslator\Plugin\Provider\TranslationServiceProvider;
use SprykerShop\Yves\ShopUi\Plugin\Provider\ShopUiTwigServiceProvider;
use SprykerShop\Yves\WebProfilerWidget\Plugin\ServiceProvider\WebProfilerWidgetServiceProvider;
use SprykerShop\Yves\WishlistPage\Plugin\Provider\WishlistPageControllerProvider;

I also went through all of the files I wrote during the course and checked the use-statements. But none makes use of a module from the other layer.

Thanks again for bearing with me here! Highly appreciated!


#16

Well… all I can suggest for the moment — just comment out AssertUrlConfigurationServiceProvider… Either in both Yves and Zed, or in one of them (just to check which one is failing).

They do nothing useful, just check if configured hosts are the same as hostnames returned from server, and throw exception in this case. By commenting out, you will stop receiving that random exception :~)

— Darius


#17

Hi Darius,

again — thanks a lot for your replies. I ended up with removing AssertUrlConfigurationServiceProvider from YvesBootstrap and now it works.

Weirdly though — when I also remove it from Zed/ApplicationDependencyProvider I’ll see a 404 on the route instead:

Spryker\Shared\ZedRequest\Client\Exception\RequestException - Client error: `POST http://zed.de.suite.local/hello-spryker/gateway/get-reversed-string` resulted in a `404 Not Found` response:
in /data/shop/development/current/vendor/spryker/zed-request/src/Spryker/Shared/ZedRequest/Client/AbstractHttpClient.php (160)</p><p><b>Url:</b>/hello-spryker</p><p><b>Trace:</b></p><pre>#0 /data/shop/development/current/vendor/spryker/zed-request/src/Spryker/Shared/ZedRequest/Client/AbstractZedClient.php(80): Spryker\Shared\ZedRequest\Client\AbstractHttpClient->request('/hello-spryker/...', Object(Generated\Shared\Transfer\HelloSprykerTransfer), Array, NULL)
#1 /data/shop/development/current/vendor/spryker/zed-request/src/Spryker/Client/ZedRequest/ZedRequestClient.php(50): Spryker\Shared\ZedRequest\Client\AbstractZedClient->call('/hello-spryker/...', Object(Generated\Shared\Transfer\HelloSprykerTransfer), NULL)
#2 /data/shop/development/current/src/Pyz/Client/HelloSpryker/Zed/HelloSprykerStub.php(27): Spryker\Client\ZedRequest\ZedRequestClient->call('/hello-spryker/...', Object(Generated\Shared\Transfer\HelloSprykerTransfer))
#3 /data/shop/development/current/src/Pyz/Client/HelloSpryker/HelloSprykerClient.php(23): Pyz\Client\HelloSpryker\Zed\HelloSprykerStub->getReversedString()
#4 /data/shop/development/current/src/Pyz/Yves/HelloSpryker/Controller/IndexController.php(19): Pyz\Client\HelloSpryker\HelloSprykerClient->getReversedString()
#5 [internal function]: Pyz\Yves\HelloSpryker\Controller\IndexController->indexAction()
#6 /data/shop/development/current/vendor/symfony/http-kernel/HttpKernel.php(144): call_user_func_array(Array, Array)
#7 /data/shop/development/current/vendor/symfony/http-kernel/HttpKernel.php(64): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#8 /data/shop/development/current/vendor/silex/silex/src/Silex/Application.php(586): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#9 /data/shop/development/current/vendor/silex/silex/src/Silex/Application.php(563): Silex\Application->handle(Object(Symfony\Component\HttpFoundation\Request))
#10 /data/shop/development/current/public/Yves/index.php(22): Silex\Application->run()
#11 {main}

#18

Hi, Moritz,

Yeah, this looks weird — AssertUrlConfigurationServiceProvider has no influence on routes, does not manipulate any of them. And, actually, is only used in development environment, not on staging/production/live.

Another thing, judging by ShopApplication module and other SprykerShop namespaces mentioned in config snippets, you are using devvm with "spryker-shop/suite" installation, meanwhile all tutorials are about "spryker/demoshop" — therefore something might work differently than described in tutorial. “Spryker Academy” is constantly improving, just sometimes documentation is lagging behind :))

At least, initial problem with random exceptions is kind of solved…

Regards,

— Darius


#19

Well I think I was a bit too quick. I see this 404 now happening a lot more often with every possible combination of the AssertUrlConfigurationServiceProvider being added to the both files or not.

Yes correct — I am using the suite atm, but not with devvm but with this package: https://github.com/mibexx/spryker-docker


#20

:)) that explains a lot… in this case, I would blame docker setup because this repository is not officialy supported by Spryker.

I would suggest to try devvm (see https://academy.spryker.com/getting_started/installation_guide.html) which is maintained by Spryker.

Regards,

— Darius