Opened 11 years ago

Closed 11 years ago

Last modified 10 years ago

#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 Thiago Avelino, 11 years ago

Reproduce the problem

Install:
gunicorn==0.17.2
django==1.5.1

Run:
$ gunicorn_django

comment:2 by Baptiste Mispelon, 11 years ago

Resolution: invalid
Status: newclosed

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 aj@…, 11 years ago

Does anyone know the cause of this bug? Whether or not it is Gunicorn's fault or a configuration error?

comment:4 by abraham.estrada@…, 11 years ago

I'm getting this error when adding "AUTH_USER_MODEL" to the settings.

comment:5 by hobs at totalgood.com, 10 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.

Note: See TracTickets for help on using tickets.
Back to Top