Lucas Stephanou http://blog.lucas-ts.com Thoughts from a web developer posterous.com Thu, 28 Oct 2010 10:58:36 -0700 Compilando Ruby com Rails 3 no UOL Cloud http://blog.lucas-ts.com/compilando-ruby-com-rails-3-no-uol-cloud http://blog.lucas-ts.com/compilando-ruby-com-rails-3-no-uol-cloud

Depois que o UOL Cloud saiu da fase de testes, estranhamente não é mais permitido o uso do ubuntu, mesmo que LTS. Sem opção, temos de usar o CentOS.

Otima distribuição baseada no Red Hat Enterprise, mas que no que tange a ruby, dispoe versões antigas.

Alguns tutoriais em ingles existem na web, mas acredito que algo especifico para este ambiente novo e material em portugues é sempre bem vindo.

Passo 1: Limpando o ambiente

Antes de instalar qualquer coisa, verificamos se não existe alguma versão antiga do ruby.

Tente

# ruby -v

Se o comando funcionar, deve listar a versão 1.8.6.

Vamos verificar os pacotes ruby instalados e remove-los

# rpm -qa |grep ruby

Este comando lista pacotes ruby instalados. Remova os pacotes com o comando

# rpm -e PACOTE

Passo 2: Preparando o ambiente

Vamos instalar bibliotecas e software basico para compilação. Para isso utilizamos o yum:

# yum groupinstall "Development Tools"

Este comando instala uma serie de dependencias para compilação no CentOS

Depois, vamos baixar o código fonte ruby, na data de hoje, outubro de 2010, 1.9.2

Primeiro, vamos para o diretorio padrao para código fonte

# cd /usr/local/src

e baixamos o fonte ruby

# wget ftp://ftp.ruby-lang.org:21//pub/ruby/1.9/ruby-1.9.2-p0.tar.gz

descompactamos

# tar xvf ruby-1.9.2-p0.tar.gz
# cd ruby-1.9.2-p0

Passo 3: Compilando

Aqui é o processo familiar para que compila no linux

# ./configure
# make
# make install

No configure, voce pode se deparar com alguma lib faltando, pesquise por ela com o yum search e instale o que falta, apenas lembre-se de sempre instalar a versão devel. Exemplo: se faltar a lib curl no configure, instale a versão que acaba com devel (curl-devel)

Verifique então a versão ruby instalada:

# ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

Passo 4: Ambiente Rails

Antes de instalar o rails, atualizamos a gem por descargo de consciencia

# gem update --system
Updating RubyGems
Nothing to update
# gem -v
1.3.7

Ou seja, ja estamos na ultima versão, 1.3.7

Podemos assim, instalar o rails:

# gem install rails

Isso deve demorar um pouco, senão quiser gerar documentação RI e RDOC, coloque os paramentros --no-ri e --no-rdoc

Para fazer testes e aplicações basicas, precisamos do sqlite, utilizado como banco de dados padrão

Infelizmente o CentOS não dispoe da versão necessaria para a compilação dos bindinds sqlite3 para ruby, por isso precisamos baixar e compilar o sqlite.

Voltamos ao diretório /usr/local/src

# cd /usr/local/src

e baixamos o código fonte do sqlite e fazemos o procedimento padão de compilação novamente

# wget http://www.sqlite.org/sqlite-amalgamation-3.7.3.tar.gz
# tar xvf sqlite-amalgamation-3.7.3.tar.gz
# cd sqlite-3.7.3
# ./configure
# make && make install

Assim, ja podemos instalar o sqlite3-ruby

# gem install sqlite3-ruby

Tudo certo, podemos verificar a versão do Rails:

# rails -v
Rails 3.0.1

Assim montamos um ambiente base, para teste de aplicações no que seria o servidor de produçao.

Para um próximo artigo, podemos incluir a instalação do novo Passenger, o 3.0 com o nginx para tornar este servidor digno para responder requisições reais.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/741340/Photo_on_2010-04-13_at_15.30.jpg http://posterous.com/users/4SyfnfuUwEqR Lucas Stephanou lucas-ts Lucas Stephanou
Thu, 30 Sep 2010 07:20:00 -0700 Mudando a Default Culture no Symfony 1.2, 1.3 e 1.4 [pt] http://blog.lucas-ts.com/mudando-a-default-culture-no-symfony-12-13-e http://blog.lucas-ts.com/mudando-a-default-culture-no-symfony-12-13-e

This post are available in english too. Click here

Este blog também esta disponível em português, clique aqui!

Uma pequena dica que pode salvar seu dia, como salvou de uma amigo.
Recebi uma pergunta de porque o symfony não estava alterando a culture, mesmo após inserir uma nova no arquivo settings.yml 

Normalmente ao trocar a culture padrão para pt_BR, o arquivo  vai ficar mais ou menos assim

all:
  .settings:
    default_culture: pt_BR

Então vocë atualiza a pagina, limpa o cache do symfony e nada parece mudar.

O problema ocorre porque o symfony guarda a informação da culture preferencial em um cookie, logo na primeira requisição. Logo, se não limpar os cookies( e cache) a nova configuração de culture não vai fazer efeito até os cookies vencerem

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/741340/Photo_on_2010-04-13_at_15.30.jpg http://posterous.com/users/4SyfnfuUwEqR Lucas Stephanou lucas-ts Lucas Stephanou
Thu, 30 Sep 2010 06:57:00 -0700 Default culture in symfony 1.2, 1.3 and 1.4 [EN] http://blog.lucas-ts.com/default-culture-in-symfony-12-13-and-14-en http://blog.lucas-ts.com/default-culture-in-symfony-12-13-and-14-en

Este blog também esta disponível em português, clique aqui!

A little tip, but that can save lifes!

This week I received a question about why symfony was not changing the culture after insert a new one in the settings.yml file.

usually, if you want the default culture to pt_BR,  the file will look like this:

all:
  .settings:
    default_culture: pt_BR

---

So, you refresh the browser and nothing seems to change.

The problem is that symfony store the default culture within a cookie in the very first request. So if you don`t clear you browse cookies, the new culture won't take effect until the cookie expires.  

 

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/741340/Photo_on_2010-04-13_at_15.30.jpg http://posterous.com/users/4SyfnfuUwEqR Lucas Stephanou lucas-ts Lucas Stephanou
Mon, 05 Oct 2009 00:00:00 -0700 Playing with Symfony Templating http://blog.lucas-ts.com/post/1091730260 http://blog.lucas-ts.com/post/1091730260

A few days ago Fabien Potencier, lead developer of Symfony project, published a new component  of the Symfony Components project.

As you may not know yet, Symfony components is a “lego way” that Fabien and symfony team found to publish piece by piece the parts that will compose the next big version of symfony framework, the very waited symfony 2 version.

This last component is a templating framework, but what is that?

A TEMPLATING FRAMEWORK AND SOME HISTORY

A big part of php developers around the world use day-by-day a templating engine, like smarty and phptal.

A group of devs have asked in symfony mailing lists to use symfony together with one of those engines.

But bundle a template engine together with Symfony was never in mind of core team, for some(and good) reasons.

Some time ago, the Symfony components project was released and putting all parts together we can understand everything, the answer is a templating framework(not a template engine) , giving us a flexibe way to implement whatever “engine” we want in a standard way.

WICH TEMPLATE ENGINE?

Well, to test Symfony templating framework we need to choice a engine to reproduce.
Wich one?
Smarty? No, thanks. Too flat to me.
PHPTal? Maybe
Haml? Hum, far away from html and php syntax. A good example to see if the framework  is good 

IMPLEMENTING HAML TEMPLATING ENGINE WITH SYMFONY TEMPLATING FRAMEWORK

Since Haml isn’t exactly a tiny language, I’ll implement just a few features.

The goal is parse this example:

!!!
%html
  %head
    %title= $title
  %body
    #header
      %h1 Symfony templating Haml example
    #content
      %img {:src => 'http://haml-lang.com/images/haml.gif'}
      %h2 Haml
      %p Haml is a markup language that’s used to cleanly and simply describe the HTML of any web document without the use of inline code. Haml functions as a replacement for inline page templating systems such as PHP, ASP, and ERB, the templating language used in most Ruby on Rails applications. However, Haml avoids the need for explicitly coding HTML into the template, because it itself is a description of the HTML, with some code to generate dynamic content.
    #footer
      %span.author Lucas Stephanou

THE SIMPLE SYMFONY HAML TEMPLATE ENGINE

Since phphaml is very easy to use, our template renderer class will be simple.

<?php

/**
 * sfTemplateRendererHaml is a renderer for Haml templates.
 *
 * @package    symfony
 * @subpackage templating
 * @author     Lucas Stephanou <lucas@lucas-ts.com>
 * @version    SVN: $Id$
 */
class sfTemplateRendererHaml extends sfTemplateRenderer
{
  private $hamlParser;

  public function __construct(HamlParser $hamlParser)
  {
    $this->hamlParser = $hamlParser;
  }    

  /**
   * Evaluates a template.
   *
   * @param mixed $template   The template to render
   * @param array $parameters An array of parameters to pass to the template
   *
   * @return string|false The evaluated template, or false if the renderer is unable to render the template
   */
  public function evaluate(sfTemplateStorage $template, array $parameters = array())
  {  

    // even if $template is a string representation, hamlParser will take care of this
    $this->hamlParser->setFile($template);

    foreach($parameters as $key => $val)
    {
      $this->hamlParser->assign($key,$val);
    }   

    return $this->hamlParser->render();
  }
}

The

<?php
__construct(HamlParser $hamlParser)

method receive a HamlParser class as argument, this will allow us to implement all this with  DI in the next article.

<?php
evaluate($template, array $parameters = array())

this method  is all we need to do for  a renderer class, we receive a $template instance(object or a string) and $parameters.

Them the symfony templating framework will expect to receive a string(in case of success ) or a boolean false if something goes wrong.

TESTING

To test if we do all right, just create a single file:

<?php

require_once '../../symfony_templating/lib/sfTemplateAutoloader.php';
sfTemplateAutoloader::register();

$loader = new sfTemplateLoaderFilesystem(dirname(__FILE__).'/%name%.haml');

require_once dirname(__FILE__).'/../lib/phphaml/haml/HamlParser.class.php';
$parser = new HamlParser();

require_once dirname(__FILE__).'/../lib/sfTemplateRendererHaml.php';
$engine = new sfTemplateEngine($loader,array(
 'haml' => new sfTemplateRendererHaml($parser),
));

echo $engine->render('haml:example', array('title' => 'Haml Lucas Test'));

Al l code is pretty obvious

  1. register symfony templating autoload
  2. instantiate a template loader (in this case a filesystem loader)
  3. include the HamlParser and instantiate it
  4. include our haml renderer class
  5. create a template engine indicating that our class will render haml files
  6. render  the template passing a single parameter(title)

All code are here for download:

http://dl.getdropbox.com/u/1417411/sfSimpleHaml.tar.bz2

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/741340/Photo_on_2010-04-13_at_15.30.jpg http://posterous.com/users/4SyfnfuUwEqR Lucas Stephanou lucas-ts Lucas Stephanou
Thu, 09 Jul 2009 00:00:00 -0700 Untitled http://blog.lucas-ts.com/post/1091726046 http://blog.lucas-ts.com/post/1091726046

Just uploaded to vimeo my first screencast.

It’s a Screencast covering a Symfony Tutorial, the  Jobeet Day 1

About Screencast:
It’s take a fresh ubuntu  and starting install everything that we need to run php/symfony and all things related to Jobeet Day 1

For this screencast, I can’t record audio and edit the video, is purely what I got from screencast recorder, sorry for that.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/741340/Photo_on_2010-04-13_at_15.30.jpg http://posterous.com/users/4SyfnfuUwEqR Lucas Stephanou lucas-ts Lucas Stephanou
Fri, 03 Jul 2009 00:00:00 -0700 Instalando PHP 5,Fastcgi, lighttpd e symfony framework http://blog.lucas-ts.com/post/1091704433 http://blog.lucas-ts.com/post/1091704433

LIGHTTPD + SYMFONY

Nota: Este artigo foi escrito em 2006, ele sera atualizado em breve.

INSTALANDO PHP 5,FASTCGI, LIGHTTPD E SYMFONY FRAMEWORK

OBJETIVO

No final das contas, ter o symfony framework, instalado e funcionando. Para isso teremos a instalação do lighttpd na porta 81, compilação do PHP 5 direto dos fontes com bibliotecas gd e zlib incluidas, suporte a mysql, sqlite, e postgresql.

INSTALANDO O LIGHTTPD

Optei por instalar via apt-get( ahhh, esqueci de dizer que estou fazendo este tutorial no debian 3, kernel 2.6.17…), a principio o lighttpd funciona na porta 80, mas como a ideia é ser uma alternativa vamos instalar na porta 81, ou  outro que voce queira. Se voce ja tinha o Apache ( como previsto) e instalou via apt, ja tera um  erro ,  o httpd vai alegar que nao pode usar a porta 80, pois  obvio, ja esta em uso. Logo de um STOP no Apache.

 # apt-get install lighttpd

Aqui ele instalou na porta 80, vamos mudar isso mais a frente.Ok!
 Usuarios do slack ( esse esta em casa :-] ), fedora, e outros. Voces devem saber uma forma parecida de instalar, no slack uso o slackpkg, que é otimo, no fedora tem o rpm.
Bem, instalem o bem dito de alguma forma. :-]

INSTALANDO DEPENDECIAS PARA COMPILAÇÃO DO PHP

Quando formos compilar o PHP precisaremos  de alguns componentes instalados no sistema, entre eles, as bibliotecas, GD, PNG, Jpeg e etc. Eu, como voces ja sabem,  estou utilizando debian, então o que fiz? Ai esta.

# apt-get install libpng12-dev libgd-dev libpng12-dev libjpeg62-dev zlib1g-dev libmysql++-dev postgresql-dev libpq-dev libpq4 libxml2-dev

Todos claro dev, ou seja pacote com os arquivos desenvolvimento (  tambem conhecidos como headers ).
NOTA: verifiquem em suas distribuições, mas no debian a libpq4, é referente ao Postgresql 8.x.x, e a libpq3 é referente ao ramo 7.x

Obs: Essas foram as bibliotecas que eu precisei , voce pode precisar de  outras,  então, preste atenção nas mensagens do ./configur do PHP , ai voce instala as depencias não encontradas.

ALGUNS AJUSTES ANTES DE COMPILAR.

Vamos editar o lighttpd.conf, que no debian fica em /etc/lighttpd/

# vim /etc/lighttpd/lighttpd.conf
Devera ter uma parte que seta o server.port = 80 , altere para 81, marromenos assim.
(…)
######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
server.port               = 81

## bind to localhost only (default: all interfaces)
server.bind                = “localhost”
(…)

Ok,  restart o light e inicie o apache. e verifique no seu navegador http://localhost (home do apache) e http://localhost:81 ( Placeholder lighttpd).
A principio estamos aptos a instalar o PHP. Let’s go dude.

COMPILANDO O PHP 5

RÁ… finalmente chegamos na parte divertida ( que nerd, não?) . 3 liçães basicas que aprendi na marra.

  1. Preste atenção nas mensagens.
  2. Preste MUITA atenção nas mensagens.
  3. Não se apavore com as mensagens.

Depois dessas otimas lições, vamos ao trabalho.

Baixe a ultima versão do PHP5.

Entre em PHP Downloads e baixe o tar.bz2 da versão estavel ( Complete Source Code).  PS.: Link Direto para Versão 5.1.4

Salve este arquivo no seu /tmp/

Descompactar

# tar -jxvf php-5.1.4.tar.bz2
Sera criada a pasta php-5.1.4 em /tmp,  ficando /tmp/php-5.1.4/
 
# cd /tmp/
php-5.1.4/

Configurar  Compilação.

# ./configure –enable-fastcgi –with-gd –with-mysql –with-pgsql –with-zlib –with-pear=/opt/php5-cgi/pear –prefix=/opt/php5-cgi –with-libxml-dir=/usr/lib/
Assim, pedimos que o bash configure habilite o modo fastcgi ( –enable-fastcgi),  compile com gd, mysql, postgresql ( –with-pgsql ) e zlib ( biblioteca de compressão ) , o parametro –with-pear=/opt/php5-cgi/pear avisa para instalar o pear no diretorio especificado, –prefix=/opt/php5-cgi avisa em qual diretorio queremos a instalação do PHP e por ultimo informamos o caminho da libxml ( –with-libxml-dir=/usr/lib/ ).
Ps.: Volto a repetir, neste ponto voces podem ter problema com dependencias, que tentamos suprir anteriormente, pode acontecer de a biblioteca que  o configure acusa não ter, estar presente, mas ele nao saber aonde, para isso informe a ele, como feito com a libxml, que passamos direto o local, no caso /usr/lib/.

Make

Se o ./configure tiver tido sucesso, compilamos e instalamos:
# make && make install
Agora, va tomar um café, jogar play2, liga pra mulher só pra dar um oi , pois o make leva em torno de 15 minutos para compilar tudo, o make install é rapido, coisa de 20 segundos e ela coloca as coisas no lugar.
( … ) after 15 minutes ( … )

Olha que beleza. temos tudo pronto. entre no diretorio de instalação, se tiver seguido a risca sera /opt/php5-cgi/, e de uma olhada.

CONFIGURANDO

PHP

Entre no diretorio do PHP:
# /opt/php5-cgi

Vamos agora copiar o php.ini
# cp /tmp/php-5.1.4/php.ini-dist /opt/php5-cgi/lib/php.ini

E claro, vamos dar uma pequena arrumada para funcionar como symfony 


# vim /opt/php5-cgi/lib/php.ini
Localize a variavel de configuração magic_quotes_gpc , que devera estar setada como On, altere para Off ficando assim:
( … )
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
( … )
Aproveite e localize tambem a seção sobre session ( :-] ),  descomente a var de config session.save_path e sete ela para /tmp, ou um dir que o PHP tenha direito de escrita durante a execução.
( … )
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process’s umask.
session.save_path = “/tmp”
( … )

 , PHP agora esta prontinho para rodar!

lighttpd

Entre no diretorio de configuração disponiveis.
# cd /etc/lighttpd/conf-available

Edite o arquivo de configuração do fastcgi
# vim 10-fastcgi.conf

Delete todo o conteudo original, e deixe assim
#*********************************************************************

server.modules                += ( “mod_fastcgi” )

fastcgi.server =     ( “.php” =>
( “*” =>
( “socket” => “/tmp/php5-fcgi.socket”,
“bin-path” => “/opt/php5-cgi/bin/php”
)
)
)

#*********************************************************************

Após isso, habilite o modulo
# lighty-enable-mod fastcgi

Opa, vamos dar um restart no lighttpd
# /etc/init.d/lighttpd restart

Teste rapido, crie um arquivo /var/www/info.php ( estou assumindo que  o dir raiz seja /var/www/ ) com o conteudo <?php phpinfo(); ?>, abra o seu navegador e aponte para http://localhost:81/info.php, se ver aquela tradicional tela com as informações do PHP, e especificar a versão certinho com o fastcgi. otimo, realmente tudo saiu como esperado, se não, revise o passos.

GO SYMFONY, GO!

Vamos agora a instalação do symfony, que sera instalado via pear.

Primeiro, vamos para o direitorio bin do php.
# cd /opt/php5-cgi/bin

Agora, atualizamos o pear
# ./pear upgrade PEAR

Beleza, hora de adicionarmos o canal do symfony, ahhh , precisa de conexão web é claro ( se estiver usando proxy, export http_proxy=”http://ip:porta” )
# ./pear channel-discover pear.symfony-project.com

Finalmente instalamos o symfony, no caso o beta ( trunk/night-build)
# ./pear install symfony/symfony-beta

Precisamos instalar tambem o Phing
# ./pear install http://phing.info/pear/phing-current.tgz

Ok, agora vamos corrigir um pequeno detalhe, caso voce tenha tambem outra versão do php instalada, trocaremos o executavel do php para o qual o symfony aponta.
# vim /opt/php5-cgi/bin/symfony
Estando com o arquivo aberto, localize a linha:
export PHP_COMMAND=php
Altere para:
export PHP_COMMAND=/opt/php5-cgi/bin/php

Para finalizar criamos um link para o binario do symfony
# ln -s /opt/php5-cgi/bin/symfony /usr/bin/symfony

Para testa, tecle no terminal
# symfony -T
Se aparecer uma lista de opções do symfony, ok, estamos indo bem.

SYMFONY AT LIGHTTPD

Pronto, temos tudo para funcionar, lighttpd instalado, php compilado e symfony instalado.

Vamos criar uma pasta para nosso projeto symfony de teste
# mkdir /var/www/symfony-teste
# cd /var/www/symfony-teste

Temos o diretorio, agora vamos criar a estrutura
# symfony new symfony-teste
Verifique o diretorio ( ls -la) deve ter sido criada uma serie de diretorios ( app, lib, data, web, e etc.)

Vamos criar um blog como aplicação teste
# symfony app blog

E um modulo Teste
#symfony module blog Teste

Vamos alterar o index padrao.
#vim apps/blog/modules/Teste/templates/indexSuccess.php
 Coloque qualquer codigo html , ou altere o que ja existe.

Agora o teste final, abrar o navegador, e aponte para http://localhost:81/
ooopsss.
Nada? faltou alguma coisa?
Claro, precisamos avisar o lighttpd, para isso abra novamente o lighttpd.conf
# vim /etc/lighttpd/lighttpd.conf
Localize a config server.document-root e altere do que estiver para
server.document-root       = “/var/www/symfony-teste/web/”

Após localize essa parte:

$HTTP[“host”] == “localhost” {
alias.url += (
“/doc/” => “/usr/share/doc/”,
“/images/” => “/usr/share/images/”
)
dir-listing.activate = “enable”
}

Troque para:

$HTTP[“host”] == “localhost” {
alias.url += (
“/doc/” => “/usr/share/doc/”,
“/images/” => “/usr/share/images/”,
“/sf/” => “/opt/php5-cgi/pear/data/symfony/web/sf/”
)
dir-listing.activate = “enable”
}

Ou seja, incluimos na lista de alias a pasta do symfony.

Agora sim, reinicie novamente o lighttpd, abra o navegador e aponte dessa vez para  http://localhost:81/blog_dev.php/Testevoce devera visualizar a rederização daquele arquivo que modificamos anteriormente.

CONCLUSÃO

Era isso pessoal, qualquer erro ou problema, me mandem um e-mail ( domluc at gmail dot com ), que responderei o mais rapido possivel.

TODO

  • Incluir Configuração do Rewrite Url no lighttpd
  • Virtual Host para cada projeto

Criado em 07/08/2006 por Lucas Stephanou
Ultima Alteração 08/08/2006

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/741340/Photo_on_2010-04-13_at_15.30.jpg http://posterous.com/users/4SyfnfuUwEqR Lucas Stephanou lucas-ts Lucas Stephanou