Prechádzať zdrojové kódy

- Environment variables set via ``environment=`` value within
``[supervisord]`` section had no effect. Thanks to Wyatt Baldwin
for a patch.

Chris McDonough 14 rokov pred
rodič
commit
31d5106958

+ 4 - 0
CHANGES.txt

@@ -10,6 +10,10 @@ Next release
     hostname to an IP address.  Previous behavior: show a socket
     error.  Current behavior: spit out a suggestion to stdout.
 
+  - Environment variables set via ``environment=`` value within
+    ``[supervisord]`` section had no effect.  Thanks to Wyatt Baldwin
+    for a patch.
+
 3.0a9 (2010-08-13)
 
   - Use rich comparison methods rather than __cmp__ to sort process

+ 5 - 0
src/supervisor/options.py

@@ -559,6 +559,11 @@ class ServerOptions(Options):
         environ_str = expand(environ_str, {'here':self.here}, 'environment')
         section.environment = dict_of_key_value_pairs(environ_str)
         section.process_group_configs = self.process_groups_from_parser(parser)
+        for group in section.process_group_configs:
+            for proc in group.process_configs:
+                env = section.environment.copy()
+                env.update(proc.environment)
+                proc.environment = env
         section.rpcinterface_factories = self.get_plugins(
             parser,
             'supervisor.rpcinterface_factory',

+ 2 - 0
src/supervisor/supervisorctl.py

@@ -190,6 +190,8 @@ class Controller(cmd.Cmd):
 
     def output(self, stuff):
         if stuff is not None:
+            if isinstance(stuff, unicode):
+                stuff = stuff.encode('utf-8')
             self.stdout.write(stuff + '\n')
     
     def get_supervisor(self):

+ 3 - 0
src/supervisor/tests/test_options.py

@@ -188,6 +188,7 @@ class ServerOptionsTests(unittest.TestCase):
         nocleanup=true
         minfds=2048
         minprocs=300
+        environment=FAKE_ENV_VAR=/some/path
         
         [program:cat1]
         command=/bin/cat
@@ -255,6 +256,7 @@ class ServerOptionsTests(unittest.TestCase):
         self.assertEqual(options.minprocs, 300)
         self.assertEqual(options.nocleanup, True)
         self.assertEqual(len(options.process_group_configs), 4)
+        self.assertEqual(options.environment, dict(FAKE_ENV_VAR='/some/path'))
 
         cat1 = options.process_group_configs[0]
         self.assertEqual(cat1.name, 'cat1')
@@ -279,6 +281,7 @@ class ServerOptionsTests(unittest.TestCase):
         self.assertEqual(proc1.exitcodes, [0,2])
         self.assertEqual(proc1.directory, '/tmp')
         self.assertEqual(proc1.umask, 002)
+        self.assertEqual(proc1.environment, dict(FAKE_ENV_VAR='/some/path'))
 
         cat2 = options.process_group_configs[1]
         self.assertEqual(cat2.name, 'cat2')