2011-10-13 72 views
0

我定义我的模块在不同的环境:在deploy.py如何在一定的环境中运行fabric命令

from __future__ import with_statement 

import os 

from fabric.api import * 
from fabric.decorators import task 

@task  
def flush_cache(environment,): 
    """ 
    Clear memcached cache 
    """ 
    sudo('/etc/init.d/memcached restart', pty=True) 

fabfile.py

from mymodule import * 

__init__.py

def localdev(): 
    """ 
    Work on local dev environment 
    """ 
    env.db_credentials = {'user':'username', 'pass':'passs','name':'mydb'} 
    env.uwsgi_command = 'uwsgi' 
    env.settings = 'local_dev' 
    env.hosts = ['[email protected]'] 

dev production(): 
    pass 

我应该如何在我的localdev环境中运行我的代码?

fab localdev deploy.flush_cache 

Fatal error: Command(s) not found: 
    localdev 

Aborting. 

谢谢!

+0

尝试: 米= __import__( 'MyModule的') FUNC = GETATTR(米,环境) FUNC() 除异常,例如: 传递任何更好的想法? –

回答

0

您需要在fabfile.py中导入init.py。传递给结构的参数用作fabfile.py中的函数名称。由于您不导入模块,因此该函数不存在,因此您将收到命令未找到错误。

+0

问题是,当我们使用经典任务(没有@task)时,我们实际上运行了两个任务(第一个是更新我们的envs,第二个是运行我们的任务)。但是,当使用@task修饰器时,其他方法将被忽略。所以我可能会写我自己的装饰器(如update_env)... –

相关问题