如何自动化django dumpdata?

时间:2015-01-29 09:41:13

标签: python django

我在本地填充我的数据库,我希望使用所有应用程序的脚本将该数据转储到生产服务器。

我正在尝试编写一个可以执行此操作的脚本...

$ source path/to/venv && python manage.py dumpdata app1 > file1.json
$ source path/to/venv && python manage.py dumpdata app2 > file2.json
...etc

我使用fabric作为我的部署脚本,我认为将它合并到那里很好,但是本地'面料中的方法似乎无法做到这一点。运行命令,但IDK为什么。

我认为这可能与此有关......

  

本地目前无法同时打印和   捕获输出,如run / sudo。捕获kwarg允许你   根据需要在打印和捕获之间切换,默认为   假。 (http://docs.fabfile.org/en/latest/api/core/operations.html

但我不确定

我尝试使用os.system n一个单独的python脚本,但是它也没有工作,它们都给了我同样的错误......

sh: 1: source: not found 

我已经多次检查并仔细检查了路径,我似乎无法弄明白。你觉得怎么样?

2 个答案:

答案 0 :(得分:2)

您的脚本在经典的sh shell下执行,而不是在bash下执行。 “source”是一个bash命令;经典导入命令是一个句点(如“.pathto / pyenv / bin / activate”)。或者你可以在脚本开头用#!/ bin / bash强制使用bash。

答案 1 :(得分:0)

因为'$ source'是无法执行的事情。我制作了一个shell脚本,将它放在一个目录中并执行该

source pathto/pyenv/bin/activate && python manage.py dumpdata quiz > data_dump/foo.json
source pathto/pyenv/bin/activate && python manage.py dumpdata main > data_dump/bar.json
source pathto/pyenv/bin/activate && python manage.py dumpdata study > data_dump/waz.json

然后在结构文件中......

def foobar():
    local('/pathto/foo.sh')