2017-07-08 1 views
0

私は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) 

答えて

0

これはあなたが何をしたかである場合はわからない、また、あなたのuwsgi.iniファイル

env = PYTHONIOENCODING=UTF-8

にこれを追加する必要がありますが、私はSTR代わりのユニコードを使用しました。お返事のための

def __str__(self): 
    return YourModel.__unicode__(self) 

+0

おかげで、それはしかし動作しません:私はあなたが書くことができ、その場合には、STRを必要なプラグインを使用していました。代わりにファイル名に非アスキー文字を削除するようになっていますが、正常に動作します。私が知っているように、エンコーディングは常に大きな問題です。 –

+0

そして私は自分のモデルを質問に追加しました。何が起こっているのか分かっていれば教えてください。どうもありがとう。 –

+0

あなたのモデルでは、__unicode__メソッドがないようです。それを追加し、self.file.nameを返します。次に、__str__メソッドを必要に応じて追加します。編集した投稿のように見えます。それは私のために働いた。 あなたのuwsgiとsupervisordに関連するものではありません。開発中はプロセスを1に設定する方が良いと思いますが、 –

関連する問題