2016-07-17 19 views
5

Bir kabuk betiğinden bir Docker kapsayıcısında bir django-tornado karma uygulaması başlatmak ve tanınmayan bir argüman olarak --noinput almak için çalışıyorum tanınmayan bir argüman olarakmanage.py collectstatic: error: tanınmayan bağımsız değişkenler: - Docker tarafından başlatılan kabuk betiğindeki zaman kaybı

usage: manage.py collectstatic [-h] [--version] [-v {0,1,2,3}] 
           [--settings SETTINGS] [--pythonpath PYTHONPATH] 
           [--traceback] [--no-color] [--noinput] 
           [--no-post-process] [-i PATTERN] [-n] [-c] [-l] 
           [--no-default-ignore] 
manage.py collectstatic: error: unrecognized arguments: --noinput 

Neden almak olacaktır --noinput: django komutlar için? Dockerfile, collectstatic ve migrate komutlarını (her ikisi için de başarısız olan --noinput argümanı ile gerçekleştiren bir dağıtım kabuk komut dosyasını çağırır. Fazladan satırları kaldırma, komutun etrafındaki boşlukları ayarlama, vb. herhangi bir sorun olmadan yerel shell script çalıştırabilirsiniz; sadece kabuk komut dosyasına Docker konteyner RUN çağrısında bir sorun gibi görünüyor

Dockerfile:

FROM python:2.7 

RUN apt-get update 
RUN apt-get install -y build-essential 
RUN apt-get install -y python-dev 
RUN apt-get install -y libmysqlclient-dev 

RUN mkdir /code 
ADD . /code/ 
WORKDIR /code 
RUN pip install -r requirements.txt 

CMD ["sh","./deploy.sh"] 

EXPOSE 8888 

deploy.sh:

#!/bin/sh 
python manage.py collectstatic --noinput 
python manage.py migrate --noinput 
python main.py 
.

Dockerfile'da RUN python manage.py collectstatic --noinput ile django komutlarını çalıştırırsam sorun yok, ancak uygulamaya özel komutları almaya çalıştığım için CMD numaralı çağrıya başvurabilirim, çünkü veritabanı ortamımın dağıtımım için Elastik Beanstalk'den olması gerekiyor ortamı.

cevap

5

Sorunumun, kabuk komut dosyasındaki satır sonları olduğu anlaşılıyor. Sanırımno'lu pythonda besleniyordu, bu yüzden --noinput'a benzeyen terminalde kendini gösteriyordu, ama aynı zamanda bir CR karakterine de eşleşiyordu.

Yerel olarak test ettiğimde, Docker Quickstart terminalinde (çalıştığı yerde) ve Docker konteynerleri her zaman Ubuntu'da çalışıyordu (burada başarısız oluyordu).

Windows ortamında yazılan kabuk komut dosyalarındaki farklı satır sonlarının bir Linux ortamında karışıklık yarattığı önceki geçmişte bu şekilde vurdum ve satır sonlarını doğru şekilde ayarlamanın ne kadar önemli olduğunu hatırlamamız gerekiyor. editörlerim ...

+0

Çevrede herhangi bir yolu var mı? Bunu çözemiyorum. – Cognoscis

+0

Düzenleyicinizin kabuk komut dosyaları için 'CR' karakterlerini girmediğinden emin olun. Eğer sürüm yazılımınız doğru bir şekilde yapılandırılmışsa, giriş/çıkış kontrolünün doğru satır sonlarına sahip olduğundan emin olmalısınız. '.gitattributes' dosya' * text = auto' ve '* .sh text eol = lf' ekledim. Eğer editörünüz hala sadece 'LF' yerine 'CRLF' ekliyorsa, bu benim için büyük sorunumdu. –

+0

Cevabınız için teşekkür ederiz. Bunu bir dahaki sefere aklımda tutacağım – Cognoscis