2011-10-13 71 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)... –

相關問題