私はsupervisordの下でuwsgiを実行する際に問題があります。スーパーバイザでuwsgiを実行すると間違ってもコマンドラインでうまくいく
主な問題は、コマンドラインでuwsgi --ini /home/satori/mysite/src/mysite_uwsgi.ini
を実行するとすべてがうまくいくが、supervisorctlで実行すると、アスキー文字以外の名前のファイルをアップロードするとサーバーが500を返した。
しかし、は実行されません。コマンドラインで実行すると、ファイルが正しくアップロードされます。
私は、プロブレンが私のスーパバイザ設定ファイルに関係していると思います。私の設定ファイルは/home/satori/mysite/src/mysite_uwsgi.ini
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /home/satori/mysite/src
# Django's wsgi file
module = mysite.wsgi
# the virtualenv (full path)
#home = /home/ubuntu/mysite/bin
#plugins = python34
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = /home/satori/mysite/src/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
# clear environment on exit
vacuum = true
に/etc/supervisord.conf
これは、それは私のmysite_uwsgi.iniファイルですさであり、これはsupervisord.conf
[program:mysite]
command=uwsgi --ini /home/satori/mysite/src/mysite_uwsgi.ini
autostart=true
autorestart=true
user=root
log_stderr=true
stdout_logfile=/var/log/mysite.log
で関連する設定であり、これは500ですエラー:
UnicodeEncodeError at /upload/view/
'ascii' codec can't encode characters in position 37-38: ordinal not in range(128)
models.py
# encoding: utf-8
import os
from django.db import models
from django.conf import settings
def get_upload_path(instance, filename):
filename = ''.join([ch for ch in filename if ord(ch) < 128])
return os.path.join("user_%d" % instance.owner.id, filename)
class Picture(models.Model):
"""This is a small demo using just two fields. The slug field is really not
necessary, but makes the code simpler. ImageField depends on PIL or
pillow (where Pillow is easily installable in a virtualenv. If you have
problems installing pillow, use a more generic FileField instead.
"""
file = models.ImageField(upload_to=get_upload_path)
slug = models.SlugField(max_length=50, blank=True)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def __str__(self):
return self.file.name
@models.permalink
def get_absolute_url(self):
return ('upload-new',)
def save(self, *args, **kwargs):
self.slug = self.file.name
super(Picture, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
"""delete -- Remove to leave file."""
self.file.delete(False)
super(Picture, self).delete(*args, **kwargs)
おかげで、それはしかし動作しません:私はあなたが書くことができ、その場合には、STRを必要なプラグインを使用していました。代わりにファイル名に非アスキー文字を削除するようになっていますが、正常に動作します。私が知っているように、エンコーディングは常に大きな問題です。 –
そして私は自分のモデルを質問に追加しました。何が起こっているのか分かっていれば教えてください。どうもありがとう。 –
あなたのモデルでは、__unicode__メソッドがないようです。それを追加し、self.file.nameを返します。次に、__str__メソッドを必要に応じて追加します。編集した投稿のように見えます。それは私のために働いた。 あなたのuwsgiとsupervisordに関連するものではありません。開発中はプロセスを1に設定する方が良いと思いますが、 –