我有這個問題太。我嘗試了@Arsh Singh的說法,爲Opensift創建基地,開發和製作文件並將DJANGO_SETTINGS_MODULE設置爲settings.production
。 但是,我因爲openshift無法找到設置文件而收到錯誤。
如果您只想運行您的production(openshift)和dev(本地機器)版本,您可以將環境變量設置爲名爲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。這只是代碼。 我的另一個問題是當需要運行第三個環境進行暫存時,那麼這個解決方案是不合適的。
然後,爲了再次解決問題,我使用了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
希望有所幫助。