Openshift上的Django,在不同的环境中保持配置文件的不同

2024-04-19 13:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始部署我已经在Openshift上开发的Django应用程序。我已经创建了应用程序并正确设置了环境(据我所知),现在我可以git push我对Openshift所做的更改了。在

我用我的家用Linux桌面作为开发机器,正如你所想象的,在两个环境中有不同的设置——数据库登录信息、路径等等。我的问题是,我如何在家里开发,将更改推送到Openshift,并且仍然最容易地在两个系统上维护我的设置?我已经知道.gitignore,但我的理解是,只有当您第一次提交到存储库中时,才会有效果。如果以后我想忽略其他文件,我会发现这变得很难维护。在

在中替换这些值是否更好设置.py使用在不同环境中保存不同值的环境变量?比如在本地机器上定义$OPENSHIFT_HOME_DIR?这似乎有点老套。在

我该如何应对?我很想听到任何在Openshift或其他具有类似环境的系统上执行此操作的人的意见。在


Tags: djangogit机器信息数据库应用程序环境linux
2条回答

我也有这个问题。我尝试了@Arsh Singh所说的,为base、dev和production创建文件,并在Openshift中将DJANGO_SETTINGS_模块设置为settings.production。 但是,我得到错误只是因为openshift找不到设置文件。在

如果只想运行生产(openshift)和dev(本地机器)版本,可以在名为pre_start_python-2.7的action_钩子上将环境变量设置为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.txt2staging_env.txt2和{}。 在这个文件中,我有一个json dict,如下所示:

^{pr2}$

然后,为了将环境变量发送到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

希望有帮助。在

您应该为不同的环境创建不同的设置文件。你可以做一个基准.py文件以包含公用设置,然后将其导入开发人员以及生产.py并在那里定义特定于环境的设置

检查此项目的布局:https://github.com/twoscoops/django-twoscoops-project/tree/develop/project_name/project_name

相关问题 更多 >