我也有这个问题。我尝试了@Arsh Singh 所说的,为基础、开发和生产创建文件,并将 DJANGO_SETTINGS_MODULE 设置为settings.production
Openshift。但是,我得到错误只是因为 openshift 找不到设置文件。
如果您只想运行您的生产(openshift)和开发(本地机器)版本,您可以在名为 pre_start_python-2.7 的 action_hook 上将环境变量设置为 openshift。该文件的路径是:.openshift/action_hooks/pre_start_python-2.7
例子:
#!/bin/bash
export DEV_MACHINE="False"
export EMAIL_HOST='smtp.example.com'
它只是为我工作,但它有任何问题。第一个是如果你想更改环境变量的任何值,你应该推送一个提交。另一个问题是将您的敏感设置(如密码、路径)放在 git 上并不是一个好的做法。这只是为了代码。我遇到的另一个问题是,当需要为 Staging 运行第三个环境时,这个解决方案就不合适了。
然后,为了再次解决问题,我使用 Frabric[1] 在 openshift 上运行了一些命令。我的解决方案包括在我的 django 应用程序上创建一个名为 config 的文件夹。在此文件夹中,创建三个文件local_env.txt2
,staging_env.txt2
和production_env.txt2
. 在这些文件中,我有一个 json 字典,如下所示:
{
"DEV_MACHINE": "True",
"EMAIL_HOST":"smtp.gmail.com"
}
然后,为了将环境变量发送到 openshift,我创建了以下代码,只读取配置文件并发送到 openshift。此代码的文件名应为fabfile.py
.
"""Management utilities."""
from fabric.api import abort, env, local, settings, task, run, sudo, cd
from fabric.operations import put
import json
# DEPLOY ON OPENSHIFT
@task
def staging_site():
"""Staging config for deployment on openshift"""
env.environment_variables = "config/staging_env.txt2"
env.environment = "staging"
env.app_name = '<staging project name on openshift>' #
@task
def production_site():
"""Production config for deployment on openshift"""
env.environment_variables = "config/production_env.txt2"
env.environment = "production"
env.app_name = '<production project name on openshift>'
@task
def set_envs_openshift(args=""):
"""
Setup all evironmnt variables
Example of usage:
* fab staging_site setup_envs_openshift
if you are logged in more than one accont on openshift, use it:
* fab staging_site setup_envs_openshift:'-l <account email>'
"""
unset_envs_openshift(args)
# run locally command
str_envs = open(env.environment_variables, 'r').read()
json_envs = json.loads(str_envs)
env_list = ''
for k, v in json_envs.items():
env_list += ' %s="%s" ' % (k, v)
local("rhc env set %s -a %s %s" % (env_list, env.app_name, args))
local("rhc app-stop -a %s %s" % (env.app_name, args))
local("rhc app-start -a %s %s" % (env.app_name, args))
@task
def unset_envs_openshift(args=""):
"""
Unset all environment variables on openshift.
Example of usage:
* fab staging_site unset_envs_openshift
"""
str_envs = open(env.environment_variables, 'r').read()
json_envs = json.loads(str_envs)
keys_list = ''
for k in json_envs.keys():
keys_list += ' %s ' % k
local("rhc env unset %s -a %s %s --confirm" % \
(keys_list, env.app_name, args))
# END DEPLOY ON OPENSHIFT
然后,要部署您的环境变量,请运行它:
fab production_site setup_envs_openshift
希望有帮助。