After upgrading, the autoloader is not working Recently, I updated from 8.1.8 to 8.1.10 (via composer update). In my local environment (running scotchbox, PHP 5.6.14), it runs fine. When deployed to the staging server (running CentOS 6.7, PHP 5.5.17), the site returns a 500 and writes the following to error_log:


  PHP Fatal error:  Class 'Drupal\Core\Site\Settings' not found in /home/[site]/public_html/drupal/core/lib/Drupal/Core/DrupalKernel.php on line 964


I copied basically everything except the /sites/ directory, so I don't think I'm missing anything.

I tried restarting httpd to no avail.

It seems like a problem with the autoloader and possibly due to the PHP version mismatch. There are many layers between autoload.php and the DrupalKernel.php bootstrap process. I'm at a loss as to what's going on here. Any help would be appreciated.
It sounds like the changes that composer made to your local environment weren't carried over. Without knowing any of the details of what might be different, you'll have to do some introspection. You can test the autoloader in both your dev/staging environment to tease out what's occurring differently in each environment.

There a few things you can do to test the autoloader:


Within index.php you can use the statement var_dump($autoloader) to dump the autoloader; it should have a classMap property which should have a keyed array that maps classes to PHP files. It should include a value for Drupal\Core\Site\Settings.
Within vendor/composer/autoload_real.php is the logic that registers the autoloader and includes other autoload_*.php used to build the autoloader object. You can various var_dump() statements to follow the path of execution to make sure the autoloader is being built correctly.
Within vendor/composer/ClassLoader.php you use the var_dump($class) statement in the ClassLoader::loadClass($class) method to have PHP spit out classes as the autoloader is including them.