O Cake PHP é um framework fantástico! Está para o PHP assim como o Rails está para o Ruby e se você desenvolve para web deveria lhe dar uma chance. Caso queira saber mais, visite http://cakephp.org e veja por sí mesmo todas as features que ele oferece.
Mas chega de #freejaba e vamos ao nosso jogo rápido! Eis o problema:
Utilizo SVN e esta tecnologia me oferece a possibilidade de criar script chamados de svn hooks. Esses scripts são executados em momentos pertinentes à operações realizadas no svn, como por exemplo ANTES DE UM COMMIT, APÓS UM COMMIT e por aí vai (para saber mais sobre isso, visite: http://svnbook.red-bean.com/en/1.1/ch05s02.html).
E pra que eu o utilizo? Para que após um commit, o código do repositório seja automaticamente publicado no ambiente de homologação, deixando-o atualizado com as últimas modificações. Basicamente, o meu svn hook script chamado post-commit é executado e nele há um código que chama um script CGI no ambiente de homologação, que por sua vez executa um svn update no local certo (veja como fazer isso em: http://wiki.dreamhost.com/Subversion#Automatic_Post-commit_Checkout).
Tudo bonito até aí, se o Cake não estivesse nessa jogada. O cake trata as urls de uma forma especial e nos impõe um padrão. Padrão que, nesse caso, precisa ser contornado, pois se não a url que contem o script CGI será mapeada por ele, que tentará redirecionar para o um controller adequado (mais sobre isso em: http://book.cakephp.org/view/46/Routes-Configuration).
Sendo assim, o que fazer para adicionar essa exceção à regra? Mais simples do que você imagina:
- Abra o .htaccess que está na raiz da sua aplicação cake
- Considerando que a url que será uma exceção seja http://exemplo,com.br/cgi-bin/pri/do_svn_update.cgi, Em cima de TODAS as RewriteRules, adicione a seguinte RewriteCond:
RewriteCond %{REQUEST_URI} !/cgi-bin/pri/do_svn_update.cgi$Exemplo Prático: Se o seu .htaccess era assim antes da modificação
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>Ele ficará assim, após a modificação:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !/cgi-bin/pri/do_svn_update.cgi$
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{REQUEST_URI} !/cgi-bin/pri/do_svn_update.cgi$
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
Sendo assim, as urls que contiverem ‘/cgi-bin/pri/do_svn_update.cgi’ serão ignoradas e portanto, não redirecionadas para o Dispatcher do Cake.
Caso encerrado! Qualquer dúvida, comentem aí.
Grande Abraço!
PS: Obrigado ao meu grande amigo Marcos Regis, pelas valiosas dicas sobre mod_rewrite. O que seria de nós sem os mestres