Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用openshift部署本地django应用程序_Python_Django_Git_Openshift - Fatal编程技术网

Python 使用openshift部署本地django应用程序

Python 使用openshift部署本地django应用程序,python,django,git,openshift,Python,Django,Git,Openshift,我用django构建了一个Web应用程序。为了托管它,我正在尝试使用openshift,但很难让任何东西正常工作。这方面似乎缺乏一个循序渐进的步骤。到目前为止,我已经让git运行良好,该应用程序可以在本地开发环境下运行,并且我已经成功地在openshift上创建了一个应用程序 根据openshift上的URL,一旦创建,我就会得到“欢迎使用您的openshift应用程序”的标准页面 我遵循这一点尝试更改wsgi.py文件。将其更改为hello world,推送它,但我仍然得到openshift默

我用django构建了一个Web应用程序。为了托管它,我正在尝试使用openshift,但很难让任何东西正常工作。这方面似乎缺乏一个循序渐进的步骤。到目前为止,我已经让git运行良好,该应用程序可以在本地开发环境下运行,并且我已经成功地在openshift上创建了一个应用程序

根据openshift上的URL,一旦创建,我就会得到“欢迎使用您的openshift应用程序”的标准页面

我遵循这一点尝试更改wsgi.py文件。将其更改为hello world,推送它,但我仍然得到openshift默认页面

是否有一个很好的综合资源可以让本地Django应用程序在Openshift上启动和运行?我在谷歌上能找到的大部分只是示例应用程序,这些应用程序并没有我自己开发的那么有用。

1)步骤1安装Rubygems
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='xyz@gmail.com',
      url='https://pypi.python.org/pypi',
      install_requires=packages,
)
Ubuntu-https://rubygems.org/pages/download 窗口-https://forwardhq.com/support/installing-ruby-windows $gem 或 C:\Windows\System32>gem RubyGems是一个复杂的Ruby包管理器。这是一个 包含指向更多信息的指针的基本帮助消息……。。 2) 步骤2: $gem安装rhc 或 C:\Windows\System32>gem安装rhc 3) $rhc 或 C:\Windows\System32>rhc 用法:rhc[--帮助][--版本][--调试][] OpenShift的命令行界面。 4) $rhc应用程序创建-mysite-t python-2.7 或 C:\Windows\System32>rhc应用程序创建-a mysite-t python-2.7 #这里mysite将是您选择的站点名称 #它将要求您输入openshift帐户id和密码 登录openshift.redhat.com:在此处输入您的openshift id 密码:********** 应用程序选项 --------------------- 域名:mytutorials 盒带:python-2.7 档位大小:默认值 缩放:没有 ...... ...... 您的应用程序“mysite”现在可用。 网址:http://mysite..................... 宋承宪致:39394949。。。。。。。。。。。。。。。。。。。。。。 Git远程:ssh://...................... 运行“rhc show app mysite”了解有关应用程序的更多详细信息。 5) 克隆您的站点 $rhc git克隆mysite 或 D:\>rhc git克隆mysite ....................... 您的应用程序Git存储库已克隆到“D:\mysite” 6) #“D:\mysite>”是我们克隆的位置。 D:\mysite>git远程添加上游-m主机git://github.com/rancavil/django-openshift-quickstart.git D:\mysite>git pull-s recursive-X 7) D:\mysite>git推送 远程:。。。。。。。。。。。。。。。。 远程:Django应用程序凭据 用户:管理员 施特夫克夫克特 远程:Git Post接收结果:成功 ............. 8) D:\mysite>virtualenv-venv--无站点包 D:\mysite>venv\Scripts\activate.bat D:\mysite>python setup.py安装 创建。。。。。 搜索Django python manage.py changepassword admin 密码: ... 已成功更改用户“admin”的密码 D:\mysite\wsgi\openshift>python manage.py运行服务器 正在验证模型…。 10) Git添加 D:\mysite>git add。 D:\mysite>git commit-am“在Django/Openshift上激活应用程序” ....... D:\mysite>git推送 #---------------------------------------------------------------------------------- #-----------在mysite中使用要安装的软件包编辑setup.py---------- 从设置工具导入设置 导入操作系统 #把需要的包裹放在这里 packages=['Django编辑:请记住,这是一个依赖于平台的答案,由于服务于Django的OpenShift平台可能会发生变化,此答案可能会无效。截至2016年4月1日,此答案在整个范围内保持有效

这在我身上发生过很多次,因为我必须装载至少5个应用程序,所以我必须创建自己的生命周期:

  • 不要使用Django盒带,而是使用Python2.7盒带。使用Django购物车。尝试更新Django版本会带来很多麻烦,如果从头开始,则不包括在内
  • 通过git克隆您的存储库。您将获得
    yourproject

    # git clone yourrepo@rhcloud.com:app.git yourproject <- replace it with your actual openshift repo address
    
    yourproject/
    +---wsgi.py
    +---setup.py
    *---.openshift/ (with its contents - I omit them now)
    
  • 在那里创建一个django应用程序。比如说,你的应用程序。将它包含在你的项目中

  • 您将有如下内容(django 1.7):

  • 像往常一样设置django应用程序(我不会在这里详细介绍)。记住在setup.py文件中相应地包含您安装的所有依赖项(这个答案不是解释原因的地方,但setup.py是软件包安装程序,openshift使用它在每次部署时重新安装应用程序,因此请使其与依赖项保持同步)

  • 为模型创建迁移
  • 按如下所示编辑给定WSGI脚本的openshift。在包含virtualenv(openshift为python盒带创建一个)之后,您将包含django WSGI应用程序,因此将正确设置pythonpath

    #!/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
    
  • 编辑.openshift/action_hooks中的hooks以自动执行数据库加密和媒体管理:

    造钩

    #!/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
    
    展开挂钩

    #!/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
    
  • <> L> > p>现在你已经准备好了,通过导入指向Django WSGi,并且你有你的脚本在运行。是时候考虑我们在这些脚本中使用的静态和媒体文件的位置了。编辑你的Django设置,告诉你你想在哪里找到这样的文件:

    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'),)
    
  • 创建示例视图、示例模型、示例移植,并推送所有内容

  • > > >强> >编辑< /强>记住要设置正确的设置来考虑这两个环境,以便可以在本地环境和OpenSHIFT中进行测试和运行(通常,这将包含一个<代码> LoalLoad Studio。Py < /C> >,如果文件存在,可选择导入,但我将省略该部分并将所有内容放在同一文件中).请简明地阅读此文件,因为类似于yourlocaldbname的内容是您必须相应设置的值

    """
    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'),)
    
  • Git添加、提交、推送、享受

    cd path/to/yourproject/
    git add .
    git commit -m "Your Message"
    git push origin master # THIS COMMAND WILL TAKE LONG
    # git enjoy
    
  • 您的示例Django应用程序几乎准备就绪!但如果您的应用程序具有外部依赖性,它将毫无理由地崩溃。这就是原因
    """
    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'),)
    
    cd path/to/yourproject/
    git add .
    git commit -m "Your Message"
    git push origin master # THIS COMMAND WILL TAKE LONG
    # git enjoy
    
    source $OPENSHIFT_HOMEDIR/python/virtenv/venv/bin/activate