vistas template tag example create python django git openshift

python - template - Desplegando una aplicación django local usando openshift



use templates django (4)

Esto es útil para mí echar un vistazo

http://what-i-learnt-today-blog.blogspot.in/2014/05/host-django-application-in-openshift-in.html

He construido una aplicación web usando django. Para alojarlo, estoy tratando de usar openshift pero estoy teniendo dificultades para que algo funcione. Parece que hay una falta de paso a paso para esto. Hasta ahora he funcionado bien con Git, la aplicación funciona en el entorno de desarrollo local y he creado con éxito una aplicación en openshift.

Siguiendo la URL en openshift una vez creado, acabo de recibir la página estándar de "Bienvenido a su aplicación de Openshift".

He seguido este https://developers.openshift.com/en/python-getting-started.html#step1 para intentar cambiar el archivo wsgi.py. Lo cambié a hola mundo, lo empujé y, sin embargo, aún obtengo la página predeterminada de openshift.

¿Existe un buen recurso integral en cualquier lugar para que las aplicaciones locales de Django estén en funcionamiento en Openshift? La mayoría de lo que puedo encontrar en Google son solo aplicaciones de ejemplo que no son tan útiles como las que ya tengo compiladas.


Estos son los pasos que me funcionan: he realizado algunos pasos manualmente, pero puede automatizarlos más tarde para que se realicen con cada comando de inserción.

  1. Crea una nueva aplicación django con python-3.3 desde el asistente del sitio web
  2. Agregar el cartucho mysql a la aplicación (mi opción es mysql)
  3. git clone creó una aplicación para local
  4. agregar requisitos.txt a la carpeta raíz
  5. Añadir myapp a la carpeta wsgi
  6. Modificar la aplicación para referirse a myapp
  7. ejecutar git add, commit, push
  8. Examinar la aplicación y errores de depuración con "rhc tail myapp"
  9. conectarse a la consola ssh

    rhc ssh myapp

10. ejecuta esto

source $OPENSHIFT_HOMEDIR/python/virtenv/venv/bin/activate

  1. instalar paquetes faltantes si los hay
  2. ir al directorio de aplicaciones

    cd ~ / app-root / runtime / repo / wsgi / app_name

  3. hacer la migración con:

    Python manage.py migrate

  4. crear superusuario:

    Python manage.py creasusuperusuario

15. Reinicie la aplicación


Edición : recuerde que esta es una respuesta que depende de la plataforma y, dado que la plataforma OpenShift que sirve a Django puede cambiar, esta respuesta podría no ser válida. A partir del 1 de abril de 2016, esta respuesta sigue siendo válida en toda su extensión.

Muchas veces me pasó esto y, como tuve que montar al menos 5 aplicaciones, tuve que crear mi propio ciclo de vida:

  1. No utilice el cartucho Django, sino el cartucho Python 2.7. Usando el carrito de Django. y tratar de actualizar la versión django trae muchos dolores de cabeza, no se incluye si lo haces desde cero.
  2. Clona tu repositorio a través de git. Obtendrá su yourproject y ...

    # git clone [email protected]:app.git yourproject <- replace it with your actual openshift repo address yourproject/ +---wsgi.py +---setup.py *---.openshift/ (with its contents - I omit them now)

  3. Haga un virtualenv para su nuevo repositorio clonado en su máquina local. Actívelo e instale Django a través de pip y todas las dependencias que necesitaría (por ejemplo, un nuevo paquete de almohadas, un paquete de base de datos MySQL, ...). Crea un proyecto django allí. Di, tu proyecto. Editar Cree, junto con, un directorio wsgi/static con un archivo vacío, ficticio (por ejemplo, .gitkeep - el nombre es solo una convención: puede usar cualquier nombre que desee).

    #assuming you have virtualenv-wrapper installed and set-up mkvirtualenv myenvironment workon myenvironment pip install Django[==x.y[.z]] #select your version; optional. #creating the project inside the git repository cd path/to/yourproject/ django-admin.py startproject yourjdproject . #creating dummy wsgi/static directory for collectstatic mkdir -p wsgi/static touch wsgi/static/.gitkeep

  4. Crea una aplicación django allí. Di, tu aplicación. Inclúyelo en tu proyecto.

  5. Tendrás algo como esto (django 1.7):

    yourproject/ +---wsgi/ | +---static/ | +---.gitkeep +---wsgi.py +---setup.py +---.openshift/ (with its contents - I omit them now) +---yourdjproject/ | +----__init__.py | +----urls.py | +----settings.py | +----wsgi.py +---+yourapp/ +----__init__.py +----models.py +----views.py +----tests.py +----migrations +---__init__.py

  6. Configure su aplicación django como siempre lo haría (no lo detallaré aquí). Recuerde incluir todas las dependencias que instaló, en el archivo setup.py en consecuencia (esta respuesta no es el lugar para describir POR QUÉ, pero setup.py es el instalador de paquetes y openshift lo usa para reinstalar su aplicación en cada implementación, así que mantenga actualizado con las dependencias).

  7. Crea tus migraciones para tus modelos.
  8. Edite el script WSGI de openshift-dado de la siguiente manera. Incluirá la aplicación WSGI de django DESPUÉS de incluir el virtualenv (openshift crea uno para los cartuchos de Python), por lo que la ruta de Python se configurará correctamente.

    #!/usr/bin/python import os virtenv = os.environ[''OPENSHIFT_PYTHON_DIR''] + ''/virtenv/'' virtualenv = os.path.join(virtenv, ''bin/activate_this.py'') try: execfile(virtualenv, dict(__file__=virtualenv)) except IOError: pass from yourdjproject.wsgi import application

  9. Edite los ganchos en .openshift / action_hooks para realizar automáticamente la sincronización de db y la administración de medios:

    construir gancho

    #!/bin/bash #this is .openshift/action/hooks/build #remember to make it +x so openshift can run it. if [ ! -d ${OPENSHIFT_DATA_DIR}media ]; then mkdir -p ${OPENSHIFT_DATA_DIR}media fi ln -snf ${OPENSHIFT_DATA_DIR}media $OPENSHIFT_REPO_DIR/wsgi/static/media ######################### end of file

    desplegar gancho

    #!/bin/bash #this one is the deploy hook .openshift/action_hooks/deploy source $OPENSHIFT_HOMEDIR/python/virtenv/bin/activate cd $OPENSHIFT_REPO_DIR echo "Executing ''python manage.py migrate''" python manage.py migrate echo "Executing ''python manage.py collectstatic --noinput''" python manage.py collectstatic --noinput ########################### end of file

  10. Ahora tiene el wsgi listo, apuntando al django wsgi por importación y tiene sus scripts en ejecución. Es hora de considerar las ubicaciones de los archivos estáticos y multimedia que utilizamos en dichos scripts. Edite la configuración de Django para saber dónde desea dichos archivos:

    STATIC_URL = ''/static/'' MEDIA_URL = ''/media/'' STATIC_ROOT = os.path.join(BASE_DIR, ''wsgi'', ''static'') MEDIA_ROOT = os.path.join(BASE_DIR, ''wsgi'', ''static'', ''media'') STATICFILES_DIRS = (os.path.join(BASE_DIR, ''yourjdproject'', ''static''),) TEMPLATE_DIRS = (os.path.join(BASE_DIR, ''yourjdproject'', ''templates''),)

  11. Cree una vista de muestra, un modelo de muestra, una migración de muestra y PUSH todo.

  12. Editar Recuerde poner la configuración correcta para considerar ambos entornos para que pueda probar y ejecutar en un entorno local Y en openshift (por lo general, esto implicaría tener un local_settings.py , opcionalmente importado si el archivo existe, pero omitiré esa parte y poner todo en el mismo archivo). Por favor, lea este archivo concienzudamente, ya que cosas como yourlocaldbname son valores que DEBE establecer en consecuencia :

    """ Django settings for yourdjproject project. For more information on this file, see https://docs.djangoproject.com/en/1.7/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.7/ref/settings/ """ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) ON_OPENSHIFT = False if ''OPENSHIFT_REPO_DIR'' in os.environ: ON_OPENSHIFT = True # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = ''60e32dn-za#y=x!551tditnset(o9b@2bkh1)b$hn&0$ec5-j7'' # Application definition INSTALLED_APPS = ( ''django.contrib.admin'', ''django.contrib.auth'', ''django.contrib.contenttypes'', ''django.contrib.sessions'', ''django.contrib.messages'', ''django.contrib.staticfiles'', ''yourapp'', #more apps here ) MIDDLEWARE_CLASSES = ( ''django.contrib.sessions.middleware.SessionMiddleware'', ''django.middleware.common.CommonMiddleware'', ''django.middleware.csrf.CsrfViewMiddleware'', ''django.contrib.auth.middleware.AuthenticationMiddleware'', ''django.contrib.auth.middleware.SessionAuthenticationMiddleware'', ''django.contrib.messages.middleware.MessageMiddleware'', ) ROOT_URLCONF = ''yourdjproject.urls'' WSGI_APPLICATION = ''yourdjproject.wsgi.application'' # Database # https://docs.djangoproject.com/en/1.7/ref/settings/#databases if ON_OPENSHIFT: DEBUG = True TEMPLATE_DEBUG = False ALLOWED_HOSTS = [''*''] DATABASES = { ''default'': { ''ENGINE'': ''django.db.backends.mysql'', ''NAME'': ''youropenshiftgenerateddatabasename'', ''USER'': os.getenv(''OPENSHIFT_MYSQL_DB_USERNAME''), ''PASSWORD'': os.getenv(''OPENSHIFT_MYSQL_DB_PASSWORD''), ''HOST'': os.getenv(''OPENSHIFT_MYSQL_DB_HOST''), ''PORT'': os.getenv(''OPENSHIFT_MYSQL_DB_PORT''), } } else: DEBUG = True TEMPLATE_DEBUG = True ALLOWED_HOSTS = [] DATABASES = { ''default'': { ''ENGINE'': ''django.db.backends.mysql'', #If you want to use MySQL ''NAME'': ''yourlocaldbname'', ''USER'': ''yourlocalusername'', ''PASSWORD'': ''yourlocaluserpassword'', ''HOST'': ''yourlocaldbhost'', ''PORT'': ''3306'', #this will be the case for MySQL } } # Internationalization # https://docs.djangoproject.com/en/1.7/topics/i18n/ LANGUAGE_CODE = ''yr-LC'' TIME_ZONE = ''Your/Timezone/Here'' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.7/howto/static-files/ STATIC_URL = ''/static/'' MEDIA_URL = ''/media/'' STATIC_ROOT = os.path.join(BASE_DIR, ''wsgi'', ''static'') MEDIA_ROOT = os.path.join(BASE_DIR, ''wsgi'', ''static'', ''media'') STATICFILES_DIRS = (os.path.join(BASE_DIR, ''yourdjproject'', ''static''),) TEMPLATE_DIRS = (os.path.join(BASE_DIR, ''yourdjproject'', ''templates''),)

  13. Git agregar, cometer, empujar, disfrutar.

    cd path/to/yourproject/ git add . git commit -m "Your Message" git push origin master # THIS COMMAND WILL TAKE LONG # git enjoy

  14. ¡Su aplicación de muestra Django está casi lista para funcionar! Pero si su aplicación tiene dependencias externas, funcionará sin ninguna razón aparente. Esta es la razón por la que te dije que desarrolles una aplicación simple. Ahora es el momento de hacer funcionar sus dependencias .

    [ no probado! ] Puede editar el gancho de implementación y agregar un comando después del comando cd $OPENSHIFT_REPO_DIR , como este: pip install -r requirements.txt cd $OPENSHIFT_REPO_DIR , asumiendo que el archivo cd $OPENSHIFT_REPO_DIR existe en su proyecto. pip debería existir en tu virtualenv, pero si no lo hace, puedes ver la siguiente solución.

    Alternativamente, el setup.py es un enfoque ya proporcionado en OpenShift. Lo que hice muchas veces es, asumiendo que el archivo Requirements.txt existe:

    1. Abre ese archivo, lee todas sus líneas.
    2. Para cada línea, si tiene un #, elimine el # y todo después.
    3. strip espacios en blanco al principio y al final.
    4. Descarte las líneas vacías y tenga el resultado (es decir, las líneas restantes) como una matriz.
    5. Ese resultado debe asignarse al argumento install_requires= keyword en la llamada de setup en el archivo setup.py.

    ¡Siento no haber incluido esto en el tutorial antes! Pero necesitas instalar Django en el servidor. Tal vez una sugerencia obvia, y todos los desarrolladores de Python podrían saberlo de antemano. Pero aprovechando esta oportunidad, comento: incluya la dependencia de Django apropiada en el archivo Requirements.txt (o setup.py, dependiendo de si usa o no un archivo Requirements.txt), ya que incluye cualquier otra dependencia.

Esto debería ayudarlo a montar una aplicación Django y me tomó mucho tiempo estandarizar el proceso. Disfrútalo y no dudes en contactarme vía comentario si algo sale mal.

Editar (para aquellos con el mismo problema que no esperan encontrar la respuesta en los comentarios de esta publicación): recuerde que si edita o crea archivos de enlace en Windows y los empuja, volarán al servidor con 0644 permisos, ya que Windows no admite este esquema de permisos que tiene Unix, y no tiene forma de asignar permisos ya que estos archivos no tienen ninguna extensión. Notará esto porque sus scripts no se ejecutarán durante la implementación . Así que intente implementar esos archivos solo desde sistemas basados ​​en Unix.

Edición 2 : puede usar ganchos git (por ejemplo, pre_commit) para establecer permisos para ciertos archivos, como scripts de canalización (compilación, implementación, ...). Vea los comentarios de @StijndeWitt y @OliverBurdekin en esta respuesta, y también esta pregunta para obtener más detalles.


1) Step 1 install Rubygems Ubuntu - https://rubygems.org/pages/download Windows - https://forwardhq.com/support/installing-ruby-windows $ gem or C:/Windows/System32>gem RubyGems is a sophisticated package manager for Ruby. This is a basic help message containing pointers to more information…….. 2) Step 2: $ gem install rhc Or C:/Windows/System32> gem install rhc 3) $ rhc Or C:/Windows/System32> rhc Usage: rhc [--help] [--version] [--debug] <command> [<args>] Command line interface for OpenShift. 4) $ rhc app create -a mysite -t python-2.7 Or C:/Windows/System32> rhc app create -a mysite -t python-2.7 # Here mysite would be the sitename of your choice #It will ask you to enter your openshift account id and password Login to openshift.redhat.com: Enter your openshift id here Password : ********** Application Options --------------------- Domain: mytutorials Cartridges: python-2.7 Gear Size: Default Scaling: no ...... ...... Your application ''mysite'' is now available. URL : http://mysite..................... SSH to : 39394949...................... Git remote: ssh://...................... Run ''rhc show-app mysite'' for more details about your app. 5) Clone your site $ rhc git-clone mysite Or D:/> rhc git-clone mysite ....................... Your application Git repository has been cloned to "D:/mysite" 6) #”D:/mysite>” is the location we cloned. D:/mysite> git remote add upstream -m master git://github.com/rancavil/django-openshift-quickstart.git D:/mysite> git pull -s recursive -X theirs upstream master 7) D:/mysite> git push remote : ................ remote: Django application credentials user: admin xertefkefkt remote: Git Post-Receive Result: success ............. 8) D:/mysite>virtualenv venv --no-site-packages D:/mysite>venv/Scripts/activate.bat <venv> D:/mysite> python setup.py install creating ..... Searching for Django<=1.6 ............. Finished processing dependencies for mysite==1.0 9) Change admin password <venv> D:/mysite/wsgi/openshift> python manage.py changepassword admin password: ... Password changed successfully for user ''admin'' <venv> D:/mysite/wsgi/openshift> python manage.py runserver Validating models…. 10) Git add <venv> D:/mysite> git add. <venv> D:/mysite> git commit -am"activating the app on Django / Openshift" ....... <venv> D:/mysite> git push #---------------------------------------------------------------------------------- #-----------Edit your setup.py in mysite with packages you want to install---------- from setuptools import setup import os # Put here required packages packages = [''Django<=1.6'', ''lxml'', ''beautifulsoup4'', ''openpyxl''] if ''REDISCLOUD_URL'' in os.environ and ''REDISCLOUD_PORT'' in os.environ and ''REDISCLOUD_PASSWORD'' in os.environ: packages.append(''django-redis-cache'') packages.append(''hiredis'') setup(name=''mysite'', version=''1.0'', description=''OpenShift App'', author=''Tanveer Alam'', author_email=''[email protected]'', url=''https://pypi.python.org/pypi'', install_requires=packages, )