热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在fabric任务中使用环境相关的django设置-Usingenvironmentdependentdjangosettingsinsidefabrictask

Imtryingtousethedatabaseconfigurationsetonsettingsfilestomakeadatabasedumpusingfab

I'm trying to use the database configuration set on settings files to make a database dump using fabric.

我正在尝试使用设置文件上的数据库配置集来使用fabric生成数据库转储。

There's more than one settings file, so I'd like to be able to do so based on the environment I choose.

有不止一个设置文件,所以我希望能够基于我所选择的环境来实现。

by now, my task is like this

现在,我的任务是这样的

def dump_database():
    with cd('~/project_folder'), prefix(WORKON_VIRTUALENV):

        django.settings_module(env.settings)
        from django.conf import settings

        dbname = settings.DATABASES['default']['NAME']
        dbuser = settings.DATABASES['default']['USER']
        dbpassword = settings.DATABASES['default']['PASSWORD']

        fname = '/tmp/{0}-backup-{1}.sql.gz'.format(
            dbname,
            time.strftime('%Y%m%d%H%M%S')
        )

        run('mysqldump -u %s -p=%s %s | gzip -9 /tmp/backup-%s.sql.gz' % (
            dbuser,
            dbpassword,
            dbname,
            fname))

But I'm getting an ImportError:

但我有一种恐惧:

ImportError: Could not import settings 'project.settings.production'

I've tried to use shell_env() to set the DJANGO_SETTINGS_MODULE instead of django.settings_module(env.settings), with the same result.

我尝试使用shell_env()来设置DJANGO_SETTINGS_MODULE,而不是django.settings_module(env.settings),结果是相同的。

I use a task to change the environment based on a environment dict:

我使用一个任务来改变环境基于环境通告:

def environment(name):
    env.update(environments[name])
    env.envirOnment= name

This way, I want to be able to create a dump from multiple hosts like:

通过这种方式,我希望能够从多个主机创建一个转储,比如:

fab environment:live dump_database
fab environment:otherhost dump_database

Without having to reproduce database settings from all hosts on fabfile.

不需要从fabfile上的所有主机上复制数据库设置。

2 个解决方案

#1


1  

Importing your Django settings file in fabric is explained here. http://fabric.readthedocs.org/en/1.3.3/api/contrib/django.html

在fabric中导入Django设置文件的说明在这里。http://fabric.readthedocs.org/en/1.3.3/api/contrib/django.html

Quoting from the above link:

引用以上连结:

from fabric.api import run
from fabric.contrib import django

django.settings_module('myproject.settings')
from django.conf import settings

def dump_production_database():
    run('mysqldump -u %s -p=%s %s > /tmp/prod-db.sql' % (
        settings.DATABASE_USER,
        settings.DATABASE_PASSWORD,
        settings.DATABASE_NAME
    ))

#2


1  

NOTE: I don't answer the question but offer a different solution

注意:我不回答这个问题,但提供了一个不同的解决方案

I had the same problem.. so I did custom .py script like that:

我遇到了同样的问题。我定制了。py脚本

I created a file named dump_db.py (placed next to fabfile.py for example, that is on the remote machine)

我创建了一个名为dump_db的文件。py(放置在fabfile旁边)。例如,py在远程机器上)

import os
import sys
from datetime import datetime
from django.conf import settings


def dump_mysql():
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", SETTINGS_MODULE)
    DB_NAME = settings.DATABASES['default']['NAME']
    DB_USER = settings.DATABASES['default']['USER']
    DB_PASSWORD = settings.DATABASES['default']['PASSWORD']

    dump_file_name = '{time}_{db_name}.sql'.format(
        time=datetime.now().strftime('%Y_%m_%d'),
        db_name=DB_NAME,
    )

    os.system('mysqldump -u {db_user} -p{db_password} {db_name} > {to_file}'.format(
        db_user=DB_USER,
        db_password=DB_PASSWORD,
        db_name=DB_NAME,
        to_file=dump_file_name,
    ))

    return dump_file_name


if __name__ == '__main__':
    try:
        SETTINGS_MODULE = sys.argv[1:].pop()
    except IndexError:
        SETTINGS_MODULE = 'project_name.settings'

    print dump_mysql()

As you see sys.argv[1:].pop() tries to take optional argument (the setting module in this case).

当您看到sys.argv[1:].pop()时,尝试使用可选参数(在本例中是设置模块)。

So in my fabfile: import os

在我的fabfile中:导入操作系统

from fabric.api import env, local, run, prefix, cd

.....

def dump():
    current_dir = os.getcwd()
    with prefix('source {}bin/activate'.format(env.venv)), cd('{}'.format(env.home)):
        dumped_file = run('python dump_db.py {}'.format(env.environment)) # the optional argument given

    file_path = os.path.join(env.home, dumped_file)
    copy_to = os.path.join(current_dir, dumped_file)
    scp(file_path, copy_to)


def scp(file_path, copy_to):
    local('scp {}:{} {}'.format(env.host, file_path, copy_to))

where env.envirOnment= 'project_name.settings.env_module'

env的地方。环境= ' project_name.settings.env_module '

And this is how I dump my DB and copy it back to me.

这就是我如何转储我的DB并将它复制给我。

Hope it comes handy to someone! :)

希望它能派上用场!:)


推荐阅读
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 本文提供了处理WordPress网站中出现过多重定向问题的方法,包括检查DNS配置、安装SSL证书以及解决数据库连接错误等步骤。 ... [详细]
  • Oracle 10g 和 11g 32位 OCI.DLL 文件下载
    32位 PL/SQL Developer 访问 64位 Oracle 11g 数据库时,需要使用 32位的 OCI.DLL 文件以确保正常连接和数据访问。本文将详细介绍如何获取并配置此文件。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 本文作为《WM平台上使用Sybase Anywhere 11》系列的第二篇,将继续探讨在Windows Mobile (WM) 系统中如何高效地操作Sybase Anywhere 11数据库。继上一篇关于安装与基本测试的文章之后,本篇将深入讲解数据库的具体操作方法。 ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
author-avatar
都市翡翠阿萨姆红茶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有