Python 在好雨云

好雨云使得在云中部署和扩展Python应用程序变得容易。无论你喜欢Django或Flask等框架,好雨云都可以使用 - 让你用你喜欢的工具去构建你想要的应用。

语言识别

默认通过requirements.txt在根目录中存在文件将应用程序识别为Python应用程序。对于您自己的应用程序,您可以通过运行pip freeze > requirements.txt 命令生成 requirements.txt 文件.
演示应用程序(python-demo)已经有一个requirements.txt,它看起来像这样:

Flask==0.12.1
Jinja2==2.9.6
Werkzeug==0.12.1
gunicorn==19.7.1

requirements.txt文件列出应用程序依赖关系及其版本。部署应用程序时,云帮会读取此文件,并使用该pip install -r requirements.txt命令安装适当的Python依赖关系。

说明:若程序没有依赖关系,可使requirements.txt为空文件。

版本选择

新创建的 Python 应用默认使用 2.7.13 版本,你也可以通过在根目录下增加一个 runtime.txt 文件来指定版本:

$ cat runtime.txt
python-3.4.3

推荐的python版本

  • Python-2.7.9~Python-2.7.13
  • Python-3.4.3,Python-3.5.2,Python-3.6.0,Python-3.6.1

当然您也可以指定(2.4.4 - 3.6.1)之间的版本,但不支持如下几个特殊的版本Python-3.4.5 Python-3.4.6 Python-3.5.3

工具库

系统使用以下的库来管理和解决 Python 依赖,用户不可以自定义它们:

  • setuptools 35.0.2
  • pip 9.0.1

构建(build)

系统会在您代码部署的环境运行以下命令来解决依赖:

$ pip install -r requirements.txt --allow-all-external

启动命令

需要用户手工在代码根目录创建 Procfile 文件来指定启动应用的命令,该文件是普通的文本文件,类似的内容如下:

web: gunicorn hello:app --log-file - --access-logfile - --error-logfile -

说明

  • web : 定义该应用的服务类型为web 平台会自动将该应用添加到全局负载均衡中。后续会添加其他类型的应用。
    >* gunicorn : Python WSGI HTTP Server for UNIX 详细设置文档参见 命令行参

Django 静态文件支持

由于 Django 的静态文件支持(CSS、图片等)不是很容易配置而且不方便调试,这里给出一个示例:

settings.py

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

默认情况下系统会在构建 Django 应用时自动执行以下命令尝试检测(--dry-run)静态文件配置是否正确:

$ python manage.py collectstatic --dry-run --noinput

如果此命令没有出错,将执行真正的命令拷贝静态文件到 STATIC_ROOT 目录:

$ python manage.py collectstatic --noinput

用户可以手工禁用上述特性,只需要在应用的环境变量里配置 DISABLE_COLLECTSTATIC 的值为 1。

Whitenoise

默认情况下,Django 在生产模式下不支持托管静态文件,我们推荐在生产环境下使用 Whitenoise
项目托管静态文件作为最佳实践,以下是具体的安装和配置方式:

>参考文档: 具体细节请查看 Django 文档的 Managing static files
Deploying static files 章节。

安装 Whitenoise

$ pip install whitenoise
...
$ pip freeze > requirements.txt

settings.py

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

wsgi.py

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)