When running `dotnet` two processes are started: one started by the user,
and one spawned as a child process. Example after running `dotnet run -p
/var/www/HelloWorld/src/HelloWorld`:
```
root 27452 0.5 5.6 3070112 57064 ? SLl 16:50 0:01 /usr/bin/dotnet run -p /var/www/HelloWorld/src/HelloWorld
root 27470 0.1 3.5 7014752 36028 ? SLl 16:50 0:00 /usr/share/dotnet/dotnet exec --additionalprobingpath /var/www/.nuget/packages /var/www/HelloWorld/src/HelloWorld/bin/Debug/netcoreapp1.0/HelloWorld.dll
```
When starting a site with supervisor, the same thing happens. When trying to
stop a site through `supervisorctl` with (in this case) `stop helloworld` the
original process is stopped (the one with id `27452`) but that process doesn't
pass on the `SIGINT` to its child process. The result is that the site is not
really shutting down, first of all, and second of all, trying start the site
again with (in this case) `start helloworld` will result in a bunch of errors
because the port kestrel wants to listen on is already in use.
To avoid this, set the `stopasgroup` and `killasgroup` configuration parameters
to true. This makes `supervisor` send the `SIGINT` to all child processes.
It is necessary to set the `HOME` environment variable when running a dotnet
core site through supervisor. If it is not set, the following exception is
thrown:
```
Unhandled Exception: System.ArgumentNullException: Value cannot be null.
Parameter name: path1
at System.IO.Path.Combine(String path1, String path2, String path3)
at Microsoft.DotNet.ProjectModel.Resolution.PackageDependencyProvider.ResolvePackagesPath(String rootDirectory, GlobalSettings settings)
at Microsoft.DotNet.Configurer.NuGetCacheSentinel.get_NuGetCachePath()
at Microsoft.DotNet.Configurer.NuGetCacheSentinel.Exists()
at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.ShouldPrimeNugetCache()
at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure()
at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(INuGetCacheSentinel nugetCacheSentinel)
at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)
at Microsoft.DotNet.Cli.Program.Main(String[] args)
```
I guess that `path1` in this case is the value of the `HOME` variable (which is
`null` unless set in `supervisord.conf`) and it seems to be used for the
default nuget package path for the www-data user. By including `HOME` as part
of the `environment` configuration, this expection is no longer thrown and the
site starts up as expected.
The previous example did not work, I updated the block to reflect what will work under the guide instructions and without having to add additional usings.
Addresses https://github.com/aspnet/IISIntegration/issues/256#issuecomment-244796828
* The entry for "Incorrect `proecessPath`, missing PATH variable, or *dotnet.exe* access violation" correctly points out that `dotnet.exe` should be on the PATH but fails to take into account that IIS won't automatically pickup the change without a restart.
* The entry for restarting IIS is made more specific: (a) Restart the server, or (b) Restart IIS via command-line or IIS Manager.
AFAIK corehost of a self-contained app is immune to the IIS un-picked-up PATH situation, so I explicitly call this out for portable apps. @pranavkm @JunTaoLuo @Tratcher @moozzyk @pan-wang correct me if I'm wrong.
Side Note: When we get the next major release of ANCM (1.1?), I'll re-run these common errors and update for log message and behavioral changes.
* missing grunt and gulp-cli
* update images to current versions of output
* update sub generators link to omnisharp github repo
* add updated windows images
* remove gulp grunt option, add bundler
* addressing nit(s)
* Add XSS documentation
Addresses #90
* Remove HTML from razor code blocks.
* Take feedback into account.
* Even more feedback magiced in
* Final feedback acted upon
Improved the description of the AddEnvironmentVariables prefix parameter.
The prefix is being removed from the environment variable names and it was not mentioned anywhere. You had to guess...