#20185 closed Bug (invalid)
TypeError: unicode argument expected, got 'str' on core management validation (used gunicorn)
| Reported by: | Thiago Avelino | Owned by: | nobody |
|---|---|---|---|
| Component: | Python 2 | Version: | 1.5 |
| Severity: | Normal | Keywords: | gunicorn |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Used gunicorn 0.17.2
Error:
2013-04-03 02:37:08 [71497] [INFO] Starting gunicorn 0.17.2
2013-04-03 02:37:08 [71497] [INFO] Listening at: http://127.0.0.1:8000 (71497)
2013-04-03 02:37:08 [71497] [INFO] Using worker: sync
2013-04-03 02:37:08 [71500] [INFO] Booting worker with pid: 71500
2013-04-03 02:37:10 [71500] [ERROR] Exception in worker process:
Traceback (most recent call last):
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/arbiter.py", line 485, in spawn_worker
worker.init_process()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
self.wsgi = self.app.wsgi()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/app/base.py", line 103, in wsgi
self.callable = self.load()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/app/djangoapp.py", line 101, in load
return mod.make_wsgi_application()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/app/django_wsgi.py", line 36, in make_wsgi_application
if get_validation_errors(s):
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/django/core/management/validation.py", line 150, in get_validation_errors
e.add(opts, "'%s' has a relation with model %s, which has either not been installed or is abstract." % (f.name, f.rel.to))
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/django/core/management/validation.py", line 19, in add
self.outfile.write(self.style.ERROR(force_str(u"%s: %s\n" % (context, error))))
TypeError: unicode argument expected, got 'str'
Traceback (most recent call last):
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/arbiter.py", line 485, in spawn_worker
worker.init_process()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
self.wsgi = self.app.wsgi()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/app/base.py", line 103, in wsgi
self.callable = self.load()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/app/djangoapp.py", line 101, in load
return mod.make_wsgi_application()
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/gunicorn/app/django_wsgi.py", line 36, in make_wsgi_application
if get_validation_errors(s):
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/django/core/management/validation.py", line 150, in get_validation_errors
e.add(opts, "'%s' has a relation with model %s, which has either not been installed or is abstract." % (f.name, f.rel.to))
File "/Users/avelino/.virtualenvs/yacows.virgula/lib/python2.7/site-packages/django/core/management/validation.py", line 19, in add
self.outfile.write(self.style.ERROR(force_str(u"%s: %s\n" % (context, error))))
TypeError: unicode argument expected, got 'str'
2013-04-03 02:37:10 [71500] [INFO] Worker exiting (pid: 71500)
2013-04-03 02:37:10 [71497] [INFO] Shutting down: Master
2013-04-03 02:37:10 [71497] [INFO] Reason: Worker failed to boot.
if it bug, the following correction: https://github.com/django/django/pull/983
Change History (5)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
This is a bug inside gunicorn, most likely caused by the use of io.StringIO instead of StringIO.StringIO which breaks under python 2.
This line in particular: https://github.com/benoitc/gunicorn/blob/0.17.2/gunicorn/app/django_wsgi.py#L13
comment:3 by , 12 years ago
Does anyone know the cause of this bug? Whether or not it is Gunicorn's fault or a configuration error?
comment:5 by , 12 years ago
Thank you very much for pointing me to the django_wsgi line that was the problem.
For me run_gunicorn (gunicorn/app/django_wsgi.py) was trying to output error messages for one of my installed apps using the wrong StringIO. I reversed the try/except order for import of StringIO (to favor python2) and then also fixed the model inheritance in the broken app. You can do either to avoid this error (don't have validation errors or use the right StringIO to log/output the validation errors).
This is the sort of error message that gunicorn is using StringIO to try to log. I was trying to ForeignKey to the abstract model contrib.auth.User:
One or more models did not validate:
agile.organization: 'user' has an m2m relation with model User, which has either not been installed or is abstract.
Reproduce the problem
Install:
gunicorn==0.17.2
django==1.5.1
Run:
$ gunicorn_django