spring
spring copied to clipboard
spring doubles the env size, sometimes causing "Argument list too long" error
Spring is great! You are great!
When spring spawns new processes, it passes in a copy of the original spring env, SPRING_ORIGINAL_ENV as an environmental variable.
https://github.com/rails/spring/blob/a85d32ef3726931b2b81abbb10a6e1c2964e7e32/lib/spring/application_manager.rb#L102
If the environment size is greater than half of ARG_MAX, the spring server, as well as other processes will spawn without spring but fail with spring because of an Argument list too long error.
Potential solutions:
- have specific environmental variables to watch rather than everything
- pass
SPRING_ORIGINAL_ENVvia a tempfile rather than another environmental variable - fail gracefully / loudly if
SPRING_ORIGINAL_ENV> 1/2ARG_MAX~~(perhaps suggesting user increasesulimit)~~ (ARG_MAX is hard-coded in OS X)
have specific environmental variables to watch rather than everything
The idea is to be agnostic to the existing environment, so everything Just Works from Spring users' point of view.
Some additional possibilities to pursue:
- Spawned processes inherit the environment by default, so perhaps passing the original env is not strictly necessary. If we can deduce the original env from the inherited env.
Process.spawncan wipe the environment as well, with theunsetenv_others: trueoption. That'd limit env size. Not sure about support in older Ruby versions.- Spring::ApplicationManager and Spring::Application could pass the original environment over their UNIX socket pair after the process is spawned, sidestepping the environment entirely.