2016-07-17 209 views
5

Sto lavorando per avviare un'app ibrida django-tornado in un contenitore Docker da uno script di shell e ottenere --noinput come argomento non riconosciuto per i comandi di Django:manage.py collectstatic: errore: argomenti non riconosciuti: --noinput nello script di shell lanciato da Docker

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 

Perché dovrei essere sempre --noinput come argomento non riconosciuta? Il mio Dockerfile chiama uno script di shell di distribuzione che esegue i comandi collectstatic e migrate (entrambi con l'argomento --noinput, che non funziona per entrambi. Ho giocato con la rimozione di linee estranee, la regolazione degli spazi bianchi attorno al comando, ecc. in grado di eseguire lo script di shell a livello locale senza problemi, ma sembra essere un problema solo nella finestra mobile contenitore RUN chiamata allo script di shell

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 
.

Se eseguo i comandi django nel Dockerfile con RUN python manage.py collectstatic --noinput non c'è alcun problema, ma sto cercando di ottenere i comandi specifici dell'applicazione nella chiamata CMD, poiché ho bisogno di avere le vars di ambiente del database da Elastic Beanstalk per la mia distribuzione ambiente.

risposta

5

Sembra che il mio problema riguardasse la fine della riga nello script della shell. Penso che sh si stesse nutrendo di python in --noinput\R, quindi si presentava nel terminale come se fosse --noinput, ma in realtà stava ottenendo anche un carattere CR a cui corrispondeva.

Quando stavo testando localmente, era nel terminale Docker Quickstart (dove funzionava), ei container Docker erano sempre in esecuzione in Ubuntu (dove non funzionava).

Mi sono imbattuto in questo modo in passato prima in cui diverse terminazioni di riga negli script di shell che sono state scritte su Windows incasinato in un ambiente Linux, e ho bisogno di ricordare quanto sia importante impostare correttamente le terminazioni di linea in i miei editor ...

+0

C'è un modo per aggirarlo? Non sono in grado di capirlo. – Cognoscis

+0

Assicurati che il tuo editor non inserisca caratteri 'CR' per gli script di shell. Se il tuo software di versioning è configurato correttamente, dovrebbe assicurarsi che il check in/out abbia le terminazioni di linea corrette. Ho aggiunto al mio file '.gitattributes' * * text = auto' e' * .sh text eol = lf'. Questo, da solo, non risolve le cose se il tuo editor aggiunge ancora 'CRLF' invece di solo' LF', però, che era il mio grosso problema. –

+0

Grazie per la risposta. Lo terrò a mente la prossima volta – Cognoscis