producao

sfPropelSyncContentPlugin: Plugin para importar/exportar o banco de dados entre ambientes (dev/prod)

Saiu no dia 16/10/2008 um novo plugin chamando “sfPropelSyncContentPlugin”:http://www.symfony-project.org/plugins/sfPropelSyncContentPlugin

Esse plugin tem a função de tornar mais prático a manipulação do banco de dados. Com ele podemos facilmente importar todo o banco de dados de produção para desenvolvimento e vice-versa. Ele utiliza o mysqldump e alguns outros comandos do mysql.

Podemos atualizar nossa base de desenvolvimento com os dados de produção com o seguinte comando:

$ symfony propel-sync-content frontend dev from prod@production

Por outro lado, podemos fazer o inverso, ou seja, atualizar a base de produção com os dados de desenvolvimento:

$ symfony propel-sync-content frontend dev to prod@production

O plugin também permite atualização de diretórios. Basta configurar o app.yml em: apps/frontend/config/app.yml

all:
  sfPropelSyncContentPlugin:
    content:
      * "web/uploads"
 

Com a configuração acima, além de atualizarmos a base de dados, vamos atualizar a pasta web/upload também.

Valeu!

plugins
producao
symfony

Comments (0)

Permalink

Utilizando o rsync do symfony com parâmetros personalizados

Essa é uma dica legal que descobri a um tempo. Para aqueles que quiserem utilizar outras funçoes que o rsync oferece, segue abaixo um trecho de código.

Editando o arquivo *config/properties.ini*:

[producao]
  host=servidor
  port=porta
  user=usuario
  dir=/diretorio
  parameters="-azC –copy-links –exclude-from=config/rsync_exclude.txt –force –delete"
 

Através do “parameters” podemos passar os parâmetros manualmente.. Nesse caso adicionei o –copy-links

Agora é mole

$ symfony sync producao go

Valeu!

producao
symfony

Comments (0)

Permalink

Gerenciando aplicações em produção (Profiling production)

Neste post irei mostrar como fazer para ter um feedback automático das aplicações quando elas já estiverem em produção. A intenção é detectar anormalidades na execução de um script e/ou saber um pouco mais do andamento da aplicação. Neste caso é estabelecido um tempo máximo para a execução de uma action, caso ela demore mais que esse tempo, um email é enviado para o administrador e um arquivo de log específico é criado.

Para executar essa tarefa vamos utilizar os *filters* do symfony.
Por padrão o tempo de execução é de 200ms, mas isso pode ser configurado no arquivo *app.yml*

Vamos criar o arquivo *app.yml*:

all:
  log_slow_requests:
    status: on
    tempo: 200
 

Vamos criar o arquivo *logSlowRequestsFilter.php* na pasta *lib/*:

<?php
class myFilter extends sfFilter
{
  public function execute ($filterChain)
  {
    $timer = sfTimerManager::getTimer(‘slow_request’);
    $filterChain->execute();

    // pegamos o tempo de execucao
    $elapsedTimeMs = $timer->getElapsedTime() * 1000;

    if (($elapsedTimeMs >= sfConfig::get(‘app_log_slow_requests_tempo’, 200)) && (sfConfig::get(‘app_log_slow_requests_status’) == "on")) {
        $logfile = sfConfig::get(‘sf_log_dir’) . ‘/slow_requests.log’;
   
        // vamos logar a URL e o tempo de execucao
        $text = sprintf("[%s Tempo: %.2f ms] %s – %s", date(‘Y-m-d H:m’) , $elapsedTimeMs, sfRouting::getInstance()\->getCurrentInternalUri(true), sfRouting::getInstance()\->getCurrentInternalUri());
   
        // escrevendo no log
        file_put_contents($logfile, $text . "\n", FILE_APPEND);

        // essa é uma classe de email personalizada.. use seu metodo para o envio do email
        Email::enviar("[slowRequest] Cliente" , "Um script demorou mais que o tempo de execucao estipulado. <br/ >O log foi gravado." , "to@email.com");
        // cuidado ao utilizar a linha acima porque pode sobrecarregar o servidor
    }
    else
    {
      $filterChain->execute();
    }
  }
}
 

Vamos adicionar o novo filtro no *myapp/config/filters.yml*:

rendering: ~
web_debug: ~
security:  ~

slow_requests:
  class: myFilter

cache:     ~
common:    ~
flash:     ~
execution: ~
 

Limpe o cache!

$ symfony cc

Pronto! O arquivo *`log/slow_requests.log`* será atualizado sempre que um script passar do tempo estipulado. Faça uns testes diminuindo o valor no yml (200).

Você terá um arquivo mais ou menos assim…

$ more log/slow_requests.log
[2008-06-20 Tempo: 292.67 ms] @default_index – modulo/index
$

Atualmente estou com a linha que envia email comentada e um script na crontab que faz o envio do log para meu email toda semana.. Isso foi bom para reduziu um pouco a carga no servidor..

Esse é o meu script..

$ more slow_request.sh
#!/bin/bash
mail -s “[Cliente] slow_request.log” to@email.com < ../../log/slow_requests.log
$

“Saiba como utilizar a crontab…”:http://www.devin.com.br/eitch/crontab

Adaptado de “http://groups.google.com/group/symfony-users/browse_thread/thread/535b264eb31cf4ac”:http://groups.google.com/group/symfony-users/browse_thread/thread/535b264eb31cf4ac

log
php
producao
symfony
yml

Comments (0)

Permalink