You can run Magento 2 in three different modes: default, developer and production. Magento 2 allows you to define which mode to run via a server variable (MAGE_MODE). This can be seen in the below example configuration provided for Nginx with Magento v2.0.10:

# Magento Vars
# set $MAGE_ROOT /path/to/magento/root;
# set $MAGE_MODE default; # or production or developer


location ~ (index|get|static|report|404|503)\.php$ {
    try_files $uri =404;
    fastcgi_pass   fastcgi_backend;

    fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
    fastcgi_param  PHP_VALUE "memory_limit=256M \n max_execution_time=600";
    fastcgi_read_timeout 600s;
    fastcgi_connect_timeout 600s;
    fastcgi_param  MAGE_MODE $MAGE_MODE;

The problem is that the above only affects requests that are served via the web server. Additionally Magento 2's mode can be changed via the command line php -f bin/magento deploy:mode:set X which is:

  1. not aware of the web server variable and
  2. does not update the server variable for you as part of changing the mode

This can lead to a disconnect between the two ways of setting the mode. If one is set to 'production' and the other to 'developer' things stop working, like the on-demand compiling of static content under the pub/static directory.

My advice: don't bother setting MAGE_MODE on the server environment level unless you are absolutely sure you'll never need to change the mode. Comment out the lines mentioning MAGE_MODE in your nginx.conf (for Nginx) or .htaccess (for Apache) files if they are present and exclusively use
php -f bin/magento deploy:mode:set production or
php -f bin/magento deploy:mode:set developer.

Blog Comments powered by Disqus.
Kristof Ringleff

Kristof Ringleff

Founder and Lead Developer at Fooman


Want to receive our monthly email with the best Magento developer tips, tricks and news? Join 7000+ other Magento developers