Categorias
Docker Nuvem

Tutorial para rodar uma aplicação PHP em containers Docker explorando ferramentas para o desenvolvimento Web e diversas stacks

Meu  tutorial/projeto exemplifica como uma aplicação WEB pode rodar em containers, introduz o uso de ferramentas específicas auxiliares para o desenvolvimento de projeto web, mas não trata da criação e manutenção de imagens Docker, não é necessariamente um roteiro sem viés que busca uma instrução genérica mas sim, bem associada ao meu modo de trabalho, incluindo ferramentas de minha escolha e, apesar de útil para quem procura informações para configurar seu próprio projeto, foca em explicar a organização dos recursos e tecnologias, permitindo que novos contribuidores de projetos que já adotam esta estrutura possam entender, melhorar e executar recursos já configurados.

Requisitos

Os exemplos abaixo são escritos para execução em um terminal linux, mas você pode facilmente executá-los em outro sistema operacional com alguns ajustes.

Este projeto considera que você já possui o Docker e o Docker Compose instalado em seu sistema operacional(veja gpupo-meta/setup-machine). Se você possui um computador sem suporte a virtualização talvéz não consiga rodar o Docker. Eu enfrentei este problema em um Mac Book Pro 2010.

Se você pretende seguir as instruções abaixo até o fim, prepare-se para trafegar mais de 3Gb de dados, entre imagens Docker e pacotes de dependência, então, se você está dependendo de sua conexão EDGE, apenas leia o conteúdo, a leitura recomendada e deixa pra executar pra valer quando estiver melhor de conexão, ok?

Vários termos usados neste tutorial possuem links que facilitarão o entendimento de quem não está familiarizado com eles, então recomendo a leitura das referências.

Alguns comandos devem ser executados em seu terminal tradicional e quando for este o caso, o símbolo :computer: estará presente, porém outros comandos requerem a execução a partir do terminal virtualizado. Quando for este o caso, o símbolo :whale: estará próximo, indicando que a execução deve ser feita no bash do container. Como chegar lá ? Você vai aprender logo abaixo…

Um último requisito importante é paciência e dedicação pois é bastante coisa pra ler, seguir referências, executar comandos, analizar diffs e refazer até entender. Pra te motivar e também responsabilizar, eu gastei várias horas de trabalho escrevendo este tutorial, tirando as melhores técnicas do meu vaú de tesouross, para que você aí do futuro aprendesse a usá-las, então, me dê algum crédito e esforço quando seguir com este tutorial, ou, se preferir algo mais facil, por seguir por aqui

Se tudo estiver pronto, selecione seu player e vamos em frente.

Start

Categorias
main

Vaga para programador PHP em Curitiba

Estou abrindo vagas para programadores PHP em Curitiba, tanto para plenos quanto juniores.

As descrições dos cargos estão em meu gist (reutilizável!).

As vagas são CLT e o projeto é altamente convidativo!

Os interessados devem ler o gist e fazer como recomendado, apenas incluindo “Curitiba” no Subject.

Categorias
main

Keep-Alive: Fazendo flush antes do término da execução, no controller do Symfony 2

No Symfony (1 e 2), a saída do controlador apenas é enviada após o processamento interno.

Para uma saída constante, em processos demorados, precisamos outra abordagem,

chamando o flush manualmente e seguindo o caminho Keep-Alive.

A necessidade

A CamelSpiderBundle possui um controller que executa a CamelSpider e isto pode demorar um pouco.

É necessário que exista uma saída informativa e uma negociação com o navegador para que não seja interrompida a exibição.

Solução: 

//….

    public function captureAction($id)
    {
        $response = new Response();
        $response->headers->set(‘Content-Encoding’, ‘chunked’);
        $response->headers->set(‘Transfer-Encoding’, ‘chunked’);
        $response->headers->set(‘Content-Type’, ‘text/html’);
        $response->headers->set(‘Connection’, ‘keep-alive’);
        $response->sendHeaders();
        flush();
        ob_flush();
        echo “<html><head><title>Capture</title></head><body><pre>”; 
        $this->get(‘camel_spider.launcher’)->checkUpdates($id);
         echo nnnn<b>Done</b>.”;
        echo “</pre></body></html>”;
        return $response;
    }
//…..
Você pode visualizar o arquivo completo aqui
Algumas informações relevantes:
Categorias
main

Customizando as páginas de erro no Symfony 2

Existem várias formas de customizar as páginas de erro no Symfony 2,

mas uma maneira bem simples,

é sobrecarregar a view de erros da Twig,

criando o arquivo app/Resources/TwigBundle/views/Exception/error.html.twig:

https://gist.github.com/1402754

 

Lógico que esta sobrecarga de exibição é feita apenas no ambiente de produção,

e para testar suas alterações você precisa limpar o cache.

./app/console cache:clear –env=prod

 

 

Categorias
main

Como acessar as informações do Usuário, no Controller Symfony 2

Se você implementou o login conforme a documentação,
pode utilizar a seguinte forma:

<?php

namespace AcmeDemoBundleController;

class DemoController extends Controller
{
    public function indexAction()
    {
            //seu objeto Token, definido no Provider:
            $this->get(‘security.context’)->getToken();

            //seu objeto Identity, definido no Provider                        
            $this->get(‘security.context’)->getToken()->getUser();     

            //seu método implementado no objeto Identity
            $this->get(‘security.context’)->getToken()->getUser()->getLastName();   

//….

Categorias
main

pecl_http no Ubuntu

Instalando a pecl_http PHP extension no Ubuntu em 4 palhetadas:

  • sudo apt-get install php-pear php5-dev libcurl4-openssl-dev
  • sudo pecl install pecl_http
  • criar /etc/php5/conf.d/http.ini contendo:
         extension=http.so
  • sudo /etc/init.d/apache2 restart
Categorias
main

PHP 5.3 ?: ternary operator e o Twitto

Pense comigo em um exemplo simples,
onde você testa x e define valor padrão caso x não atenda ao
requisito mínimo.

Tradicionalmente escreveríamos algo assim:
  
> php > $x = 1; if( $x < 2 ){ $x = 3; }; var_dump($x);
> int(3)

Agora a escrita reduzida, adicionada no PHP 5.3:

> php > $x = 1; $x > 1 ?: $x = 3; var_dump($x);
> int(3)
> php > $x = 2; $x > 1 ?: $x =  3; var_dump($x);
> int(2)

A escrita reduzida permitiu a escrita de um framework em um tweet,
o Twitto – A web framework in a tweet:

require __DIR__.‘/c.php’; if (!is_callable($c = @$_GET[‘c’] ?: function() { echo ‘Woah!’; }
)) throw new Exception(‘Error’); $c();

Onde mais você vê o uso de 😕 ?

Categorias
main

Podcast: Symfony 2 e os Namespaces PHP 5.3

Mais um papo com meu amigo  @rgou 

sobre a PSR-0 , bundles e outras novidades Symfony 2 
nesta série de podcasts em modelo Bazar.
Seu você usa o iTunes, assine o podcast na iTunes Store!

Categorias
main

Podcast: Primeiras impressões sobre Symfony 2

Symfony 2 lançado e eu aqui gravei no meu iPhone uma conversa sobre
 algumas impressões sobre o framework.

Confere aí:

E aí? Que tal contribuir ?

Categorias
main

Doctrine e SQLs personalizadas