segunda-feira, 28 de setembro de 2009

Rails loves Firebird

Para fazer o Rails falar com o Firebird, levando-se em conta que o Firebird 2.1 e o Rails estão instalados.

$ sudo apt-get install firebird2.1-dev
$ sudo gem install fb
$ sudo gem install fb_adapter


O nome do adapter é 'fb'. Para criar registros, é necessário ter um generator com o nome #{table_name}_seq Não testei com migrations, então não sei se um create_table também criaria o generator.

Tentei usar o recurso de alias do Firebird e não funcionou aqui. Só com o caminho completo até o banco do Firebird.

Tanto o fb (acesso a Firebird com Ruby) quanto fb_adapter (adaptador de Firebird para Rails) estão disponíveis em http://github.com/rowland.


OBS: Caso esteja tendo problemas com o uso desta gem, leia os comentários.

quinta-feira, 17 de setembro de 2009

Instalação do Glassfish v2

Ao instalar o Glassfish-v2, não esquecer de, além de rodar o jar, seguir os passos aqui.

sexta-feira, 11 de setembro de 2009

Apache + Passenger retornando 404 para qualquer coisa

Ao rodar o Apache + Passenger agora há pouco, estava obtendo sempre um erro 404. Olhando nos logs de erro do apache:
# tail /var/log/apache2/error.log
[Fri Sep 11 11:24:50 2009] [error] [client 172.20.6.9] File does not exist: /var/www/solicitacoes
[Fri Sep 11 11:26:16 2009] [error] [client 172.20.6.9] File does not exist: /var/www/solicitacoes


Muito estranho, já que meu virtual host apontava para uma pasta completamente diferente. Vamos ver então como o apache está vendo os virtual hosts:
# apache2ctl -S
apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.6.250 for ServerName
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server 172.20.6.250 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost 172.20.6.250 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost 172.20.6.250 (/etc/apache2/apache2.conf:287)
Syntax OK


Há dois virtual hosts na porta 80, e um deles, aquele da pasta sites-enabled, não é o que eu configurei. Solução? rm no arquivo /etc/apache2/sites-enabled/000-default e tudo ok.

segunda-feira, 7 de setembro de 2009

Erro ao rodar RSpec ou Cucumber em aplicação Rails

Ao rodar specs aqui eu vinha obtendo o erro:
$ rake spec
/var/lib/gems/1.8/gems/activesupport-2.3.3/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant Test::Unit::TestResult::TestResultFailureSupport (NameError)


Algumas soluções encontradas na rede recomendavam adicionar um require 'test/unit' no environment.rb, tudo muito estranho. Atualizei todas as gems e nada. Até que fuçando a configuração aqui, comecei a desinstalar algumas gems suspeitando de conflito. Então, quando desinstalei o mocha, tudo passou a funcionar. É importante notar que o projeto foi recém-criado e não tinha nenhuma referência ao mocha.

De qualquer modo, isto não trouxe qualquer problema adicional, já que o RSpec oferece uma API de mocking.

[edit] No arquivo spec/spec_helper.rb gerado pelo script/generate rspec há uma configuração comentada onde é possível estabelecer que o framework de mocking a ser usado seja o mocha.

terça-feira, 28 de julho de 2009

undefined method `reenable' for [environment]>:Rake::Task

Este estranho erro ocorria ao rodar rake db:migrate. Em vários blogs e fóruns, achei sugestões para se atualizar o rake via apt-get. Porém a minha gem do rake estava atualizada e os pacotes instalados no Ubuntu também. O rake que eu usava, porém, - pelo menos assim eu pensava - era uma gem e não estava diretamente instalado no Linux. Ao contrário do que eu pensava, tinha sim um rake instalado no S.O. A solução foi remover o rake via apt-get. Quando fiz isso, o comando ruby desapareceu. Na verdade, apenas o link simbólico ruby --> ruby1.8 em /usr/bin foi excluído. Após tê-lo criado novamente, tudo funcionou bem.

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.