Como devo depurar plugins Trac?
-
12-09-2019 - |
Pergunta
Estou prestes a iniciar uma boa quantidade de trabalho que se estende Trac para atender nossos requisitos de negócios. Até agora eu usei PythonWin e agora Netbeans 6.5 como os ambientes de desenvolvimento -. Nenhum destes parecem fornecer alguma forma de depurar o plugin Eu estou trabalhando em
Eu sou totalmente novo para Python então provavelmente não tiver configurado o ambiente de desenvolvimento como poderia ser congfigured para obtê-lo de depuração.
Am I faltando alguma coisa óbvia? Parece um arcaico pouco de ter que recorrer a imprimir mensagens de depuração no log do Trac, que é como eu estou depuração no momento.
Solução
Você pode criar um script wrapper wsgi e executá-lo em um depurador. Por exemplo:
import os
import trac.web.main
os.environ['TRAC_ENV'] = '/path/to/your/trac/env'
application = trac.web.main.dispatch_request
from flup.server.fcgi import WSGIServer
server = WSGIServer(application, bindAddress=("127.0.0.1", 9000), )
server.run()
Você poderia executar este script no depurador, e você pode usar lighttpd como um frontend para a aplicação web com uma configuração trivial como esta:
server.document-root = "/path/to/your/trac/env"
server.port = 1234
server.modules = ( "mod_fastcgi" )
server.pid-file = "/path/to/your/trac/env/httpd.pid"
server.errorlog = "/path/to/your/trac/env/error.log"
fastcgi.server = ( "/" =>
(( "host" => "127.0.0.1",
"port" => 9000,
"docroot" => "/",
"check-local" => "disable",
))
)
Basta executar o wrapper fcgi wsgi no depurador, defina os pontos de interrupção no plugin, e abrir a página web.
Outras dicas
Geralmente, nós teste de unidade pela primeira vez.
Então, escrevemos mensagens de log para diagnosticar problemas.
Nós geralmente não dependem fortemente de depuração porque é muitas vezes difícil de fazer em situações onde scripts Python são incorporados em um produto maior.
Descobri que Winpdb é um depurador python decente.
Mas, como S. Lott aponta, depuradores não pode ser muito útil para você quando seu projeto é incorporado dentro um maior.
Trac contém bons exemplos de código Python, usando-o como um guia vai ajudar a evitar erros. Apenas certifique-se de testar seu código, e fazê-lo muitas vezes, desde que você é novo para Python ... Você vai achar que você não precisa de um depurador.
Para o teste de unidade, consulte a PyUnit .
Eu achei mais útil para adicionar esses messageboxes fantasia Trac em tempo de execução como a depuração de ajuda ou rastreamento, como esta:
from trac.web.chrome import add_notice
...
def any_function_somewhere(self, req, ...anyother args...):
...
var = ...some value...
add_notice(req, "my variable value I am tracing %s" % var)
Às vezes é mais confortável do que a leitura logging depois. Embora ele só funciona se a função que você está correndo tem que arg req
.