sexta-feira, 5 de junho de 2009

Configurar múltiplas aplicações Rails no mesmo servidor com mod_passenger (a.k.a. mod_rails)

No apache2.conf (aqui /etc/apache2/apache2.conf):

ServerName ip_do_servidor
DocumentRoot /home/rodrigo/desenvolvimento/temp # uma pasta que não é de app Rails
RailsBaseURI /myapp # sub-url da sua aplicação


Dentro da pasta apontada como DocumentRoot, é necessário criar um link simbólico para a pasta public da aplicação Rails referenciada.

Além disto, você deve incluir na seção de configuração do config/environment.rb:
config.action_controller.relative_url_root = "/myapp"

O problema com esta configuração no environment.rb é que ela serve apenas para o ambiente de produção. Porém, é possível criar uma solução genérica (extraída daqui) que resolve o problema sem a necessidade de mexer no environment.rb:
# automatic relative_url_root fix
# for Phusion Passenger 2.2.2 and Rails 2.3.2 (>= 2.2.2)
# by pts@fazekas.hu at Mon May 4 20:48:38 CEST 2009
# from http://ptspts.blogspot.com/2009/05/how-to-fix-railsbaseuri-sub-uri-with.html
fail unless ActionController::Request # check loaded
module ActionController
class Request
def initialize(env)
@env = env # Rack::Request#initialize does only this
path = request_uri.to_s[/\A[^\?]*/]
sn = @env['SCRIPT_NAME']
if (RAILS_ENV == 'production' and
(sn.empty? or sn.starts_with?('/')) and
path == sn + @env['PATH_INFO'])
Base.relative_url_root = sn
end
end
end
end


O único problema que ainda resta é que as imagens definidas no CSS - e se você é um desenvolvedor profissional, ou seja, usa padrões web, vai ter imagens definidas no CSS - é que arquivos CSS, até onde sei, são estáticos e os links serão diferentes nos ambientes development/test e production.

Uma solução que pensei agora rapidamente é criar um script que processe os CSS's e altere os links e que seja incluído nos recipes do Capistrano. Mas vou procurar um pouco mais pra ver se há uma solução dentro do Rails.

quarta-feira, 20 de maio de 2009

Erro maluco ao rodar .sh

Caso ao rodar um .sh você obtenha uma resposta como esta:

/bin/bash^M: interpretador inválido: Arquivo ou diretório inexistente
ou
/bin/sh^M: interpretador inválido: Arquivo ou diretório inexistente

O problema é que o arquivo tem caracteres de quebra de linha do Wndows. O Windows usa 2 caracteres para quebra de linha; o Linux apenas 1. Assim, esse caracter fica sobrando. Para solucionar isto, basta chamar

dos2unix nome-do-arquivo.sh

Caso não tenha o dos2unix instalado, digite (funcionou no Ubuntu)

apt-get install tofrodos

quarta-feira, 13 de maio de 2009

Extrair partes de data no SQL do Firebird

A função extract é usada para extrair partes de uma data no Firebird. Por exemplo: extract(year from data_lancamento) extrai o ano do campo data_lancamento. O mesmo pode ser feito para month, day, hour, minute...

segunda-feira, 11 de maio de 2009

Instalação de Ruby, Rails e acesso ao PostGreSQL

$ sudo apt-get install ruby1.8 rubygems rubygems1.8 ruby1.8-dev libpq-dev make rake libopenssl-ruby1.8
$ sudo gem install rails
$ sudo gem install mongrel


No Ubuntu 8.10
$ sudo gem install postgres
No Ubuntu 9.04
$ sudo gem install ruby-pg

segunda-feira, 4 de maio de 2009

Instalação do Tomcat no Linux

Depois de descompactar e configurar as variáveis de ambiente é preciso atribuir permissão de execucão aos 3 scritps abaixo. Os dois últimos não são executados diretamente e a mensagem de erro não indica que o problema está neles.

-startup.sh
-catalina.sh
-setclasspath.sh

Reparação de bases de dados no Firebird 2.0

Sintaxe Geral

* gfix [options] -user -password [options]

1º Passo - (Dar um shutdown no database)
gfix -user SYSDBA -password masterkey /path/database.fdb -shut -force 0

2º Passo - (Validar o database)
gfix -user SYSDBA -password masterkey /path/database.fdb -v -f

3º Passo - (Reparar o database)
gfix -user SYSDBA -password masterkey /path/database.fdb -m -f -i

4º Passo - (Deixando o database online novamente)
gfix -user SYSDBA -password masterkey /path/database.fdb -online

Obs.: Repetir os passos 2 e 3 diversas vezes.

Firebird com codificação WIN1252 com acentuação correta no Linux

Connection connection = DriverManager.getConnection("jdbc:firebirdsql://host/banco?lc_ctype=WIN1252",username, password);

sexta-feira, 1 de maio de 2009

Definir senha para o usuário postgres

O SGBD PostGreSQL vem com um usuário padrão postgres. Para definir uma senha para ele:
$su - postgres
# entre com a senha do usuario postgres
$psql postgres
postgres=# alter user postgres with encrypted password 'digite-a-senha-aqui';



Não sabe como definir a senha para o usuário postgres?
$su
# entre com a senha do root
$passwd postgres
# digite a senha desejada



Não sabe a senha do root? Leia aqui.

Erro de permission denied ao chamar script/server

$chmod 755 script/server

Definir senha do root no Ubuntu

$sudo su
# entre com a senha do seu usuário
$passwd
#entre com a senha que você quer para o root

quarta-feira, 22 de abril de 2009

Atualização do rubygems no Ubuntu 8.10

$ sudo gem install rubygems-update
$ cd /var/lib/gems/1.8/bin
$ sudo ./update_rubygems


Caso haja problemas com gems, é importante verificar por elas em:
~/.gem

ruby -e "puts $:"

quinta-feira, 8 de janeiro de 2009

Erro de Facelets no JBoss 5

Estou migrando uma aplicação para o JBoss 5 e ocorreu um erro muito estranho em uma aplicação que já funcionava e obtive o seguinte erro relativo ao Facelets no log do JBoss:

18:31:45,863 ERROR [compiler] Missing Built-in Tag Libraries! Make sure they are included within the META-INF directory of Facelets' Jar

Procurando daqui e dali na Internet, encontrei um bug report a respeito. A solução apontada, substituir o Facelets por uma versão mais recente, funcionou bem aqui.

segunda-feira, 17 de novembro de 2008

Remover arquivos do controle de versões do Subversion

Há uma pasta oculta no home chamada '.subversion'. Dentro desta pasta há um arquivo chamado 'config' no qual se devem inserir os arquivos (ou máscaras) a serem ignorados no item 'global-ignores'. Por exemplo:

global-ignores = .project .classpath *.class build .settings *.jardesc

quinta-feira, 6 de novembro de 2008

Que troço é esse?

Saco de coisas é um blog criado de mim para mim, para guardar soluções e receitas de bolo para resolver coisas não muito importantes mas que enchem o saco. Um guia de referência rápida para problemas que enfrento no dia-a-dia. Algumas coisas serão certamente ridiculamente simples, outras ainda mais. Enfim, este é um blog que, em tese, não vale muita coisa. Se alguém chegar a ser ajudado por algo que está aqui, fico feliz.

Coisas que serão encontradas por aqui:
- dicas curtas e grossas para resolver pequenos problemas
- lembretes de configurações e outras coisas chatas
- chaves de fenda, tesouras, alicates: coisinhas de merda que podem te tirar de um aperto

Coisas que nunca serão encontradas por aqui:
- discussões
- profundidades
- software proprietário