2015-11-08 46 views
5

Provo a creare una finestra di sviluppo basata sulla finestra mobile per la nostra app django. Funziona senza intoppi.finestra mobile con pycharm 5

Nessuno dei miei membri della squadra si prenderà cura di questo finché non ci sarà una bella integrazione IDE, quindi suono il nuovo e brillante Docker Support in pycharm 5.

Ho seguito la documentazione collegata e pycharm riconosce il mio contenitore web ed è un interprete python.

Ecco la mia finestra mobile-compose.yml:

web: 
    build: . 
    ports: 
    - "8000:8000" 
    volumes: 
    - .:/srv/app 
    links: 
    - database 
    - search 
    - cache 
    entrypoint: /home/deployer/web-entrypoint.sh 


worker: 
    build: . 
    volumes: 
    - .:/srv/app 
    command: celery -A core worker -l info 
    links: 
    - database 
    - search 
    - cache 

database: 
    image: postgres:latest 
    volumes_from: 
    - data 
    environment: 
    - POSTGRES_USER=app_user 
    - POSTGRES_PASSWORD=app_password 

data: 
    image: busybox 
    volumes: 
    - /var/lib/postgresql/data 

search: 
    image: "elasticsearch:1.7" 
    command: "elasticsearch --http.bind_host=0.0.0.0" 
    ports: 
    - "9200:9200" 

cache: 
    image: "redis:latest" 
    ports: 
    - "6379" 

Purtroppo non v'è alcun supporto finestra mobile-composizione in PyCharm, è per questo che Djangos runserver fallito al momento della connessione al database. Perciò ho copiato gli alias (per fortuna prevedibili) dal contenitore web /etc/host:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'app_db', 
     'USER': 'app_user', 
     'PASSWORD': 'app_password', 
     'HOST': 'docker_database_1', 
     'PORT': '5432', 
    } 
} 

HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 
     'URL': 'http://docker_search_1:9200/', 
     'INDEX_NAME': 'app', 
    }, 
} 

BROKER_URL = 'redis://docker_cache_1:6379/0' 
CELERY_RESULT_BACKEND = BROKER_URL 

Ora l'errore di connessione al database non c'è più, ma l'uscita del mio server Django mi dà questo:

a6993f56e61e:python -u /opt/project/manage.py runserver docker:8001 --traceback 
Performing system checks... 

System check identified no issues (0 silenced). 
November 08, 2015 - 19:54:29 
Django version 1.8.6, using settings 'core.settings.dev' 
Starting development server at http://docker:8001/ 
Quit the server with CONTROL-C. 
Error: [Errno -2] Name or service not known 

Process finished with exit code 1 

Nessuna traccia di stack, solo questo.

Cosa c'è di strano: python -u /opt/project/manage.py - che cos'è questo? La cartella non esiste sia sull'host che sul contenitore.

mio Django Server conf:

Django server conf

ho provato anche una conf puro-python in questo modo:

Pure Python Implementation

Questo è come mega-confusione perché cerca di nuovo per connettersi tramite il collegamento "database", anche se lo rimuovo dalle impostazioni.

Quali sarebbero i prossimi passi per il debug?

Domanda bonus: pyCharm riconosce i pacchetti installati nelle impostazioni del progetto, ma non riesce a trovarlo nel codice, perché?

Failed import from dist-packages

UPDATE

ho scoperto che PyCharm sta iniziando il contenitore per sé e non utilizza il contenitore finestra mobile esistente. Quindi sembra che pyCharm possa funzionare solo con un singolo contenitore, che non sembra affatto utile.

+0

hanno aggiornato la mia risposta dato che ora ho un ambiente docker-compose funziona molto bene in pycharm con debug completo/test/gestire il supporto dei comandi. Penso che ce ne sia quasi nella configurazione, eccetto che non usare i nomi brevi di composizione docker invece di utilizzare una variabile di ambiente nell'istanza della macchina mobile. – dalore

risposta

5

Si scopre che pycharm 5 supporta solo un contenitore per progetto. Fondamentalmente ciò si traduce in "Il supporto Docker è inutile in PyCharm 5".

Gestione multi-contenitore sulla parte superiore della finestra mobile composizione è richiesto qui ed è in attesa TUO upvote:

https://youtrack.jetbrains.com/issue/IDEA-137765

+0

tutte le notizie su questo lato? Sto avendo lo stesso problema e il supporto attuale è abbastanza inutile. Chi usa solo un contenitore alla volta? è un'app senza db in fondo, una strana scelta da pycharm – EsseTi

+0

Secondo me, i jetbrain aggiungono molte funzionalità alle caselle di controllo senza valori. Ci sono molti bug e cose mal concepite che non ricevono la giusta attenzione a favore dell'aggiunta delle ultime parole d'ordine hype nelle note di rilascio. – shredding

+0

Il supporto Docker in pycharm è per il contenitore python. Lascia felicemente i miei altri contenitori da solo (come dovrebbe). Supporta più contenitori in quanto posso facilmente avviare più server di esecuzione ecc. Inoltre posso visualizzare i log, ispezionare, ecc. Su tutti i contenitori dall'interno di pycharm5 stesso. – dalore

1

Ho una soluzione. Ho configurato un docker: compongo un po 'come il tuo (postgres, redis, solr). È impostato per utilizzare un DJANGO_SETTINGS_MODULE personalizzato (chiamato impostazioni.docker) che cerca una variabile d'ambiente DOCKER_IP da utilizzare nei servizi. Tutto funziona bene.

Quindi stava provando Pycharm per farlo funzionare con l'integrazione della finestra mobile da quando eseguo Windows (quindi macchina docker), posso eseguire solo una sessione mobile di composizione in modalità distaccata. Non molto utile per una shell. Ma quello di Pycharm (come hai scoperto) gestisce un altro contenitore e la shell funziona bene. Quindi ottieni la tua shell di django anche su una macchina Windows/Mac che deve essere eseguita in modalità indipendente.

Anche test, runserver e qualsiasi altro comando di gestione funzionano bene all'interno di PyCharm e il lavoro di debug/breakpoints.

configurazione

runserver: runserver configuration

interprete: interpreter

In settings.docker abbiamo

DOCKER_IP = os.environ.get('DOCKER_IP', '127.0.0.1') 
# database 
DATABASES = { 
    'default': { 
     'ENGINE': 'transaction_hooks.backends.postgis', 
     'USER': 'postgres', 
     'NAME': "dbuser", 
     'HOST': DOCKER_IP, 
     'POST': 5432, 
     'CONN_MAX_AGE': None, 
    }, 
} 
# redis 
REDIS_URL = "redis://%s:6379/1" % DOCKER_IP 

si ottiene l'idea

+0

Sei in grado di connettersi al debugger? – shredding

+0

Normalmente utilizzo il debugger remoto pydevd, anche localmente (poiché è un po 'più veloce). Configura un'istanza di debug pydevd rimossa e connettiti al tuo post host. – dalore

+0

Aggiornamento su questo, funziona perfettamente con il debugger. Non c'è bisogno di una complicata configurazione pydev. Aggiornerò la mia risposta sopra con screenshot e risponderò a qualsiasi problema. – dalore

Problemi correlati