Rails 2.2.2 upgrade – Rails application failed to start properly

0 comments

Posted on 25th November 2008 by ArthurLeon in Dicas | Ruby On Rails

Ontem meus aplicativos hospedados no bluehost estavam funcionando perfeitamente, mas hoje me deparo com o temido erro:

Application error
Rails application failed to start properly

Ou seja, “deu pau”. Creio que de madrugada foi feito um upgrade e algumas coisas pararam de funcionar.

Acessei minha conta via ssh e fui para a pasta “public” onde esta o aplicativo mais usado, e executei o seguinte comando para ver o que estava acontecendo:

./dispatch.cgi

O resultado foi o seguinte:

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:530:in `send': undefined method `cache_template_loading=' for ActionView::Base:Class (NoMethodError)
from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:530:in `initialize_framework_settings'
...

Procurando no google o que diabos era isso, descobri que o método “cache_template_loading=” não funciona mais no rails 2.2.2. A solução apontada é comentar a linha em config/environments/development.rb ou config/environments/production.rb, dependendo do seu caso:

# config.action_view.cache_template_loading            = true

Maravilha! Ou não!!!

The page you were looking for doesn’t exist.

You may have mistyped the address or the page may have moved.

Ou se estiver em modo de desenvolvimento vai aparecer:

Routing Error
no route found to match “/seu_controller” with {:method=>:get}”

Já melhorou um pouco, mas o aplicativo ainda não está funcionando. Voltamos para o Google. Descobri que o problema pode ser por estar rodando o aplicativo em uma sub-pasta do meu domínio e preciso dizer isso para o servidor.

Para contornar mais este problema, acrescentei a seguinte linha no final do arquivo config/environment.rb:

ActionController::AbstractRequest.relative_url_root = "/subpasta_do_dominio"

Agora sim, up and running. Usuários felizes e aprendi mais um pouco de rails. Não sei se é a melhor solução, então caso alguém saiba uma maneira melhor de resolver coloque nos comentários.

Undefined method ‘length’ for #<Enumerable::Enumerator… no Ruby 1.8.7

0 comments

Posted on 11th July 2008 by ArthurLeon in Dicas | Ruby On Rails

Estou desenvolvendo um programa no trabalho e a função truncate funciona perfeitamente. Porém, quando fiz o upload para o BlueHost me deparei com o seguinte erro:

(undefined method 'length' for #<Enumerable::Enumerator:0xXXXXXXXXXXX>)

Isso foi algo que estragou minha tarde de ontem…
Procurando no google, descobri que o problema é a versão do rails.
No meu PC de desenvolvimento, na raiz do meu aplicativo rails, digito o comando script/about para descobrir a versão do ruby/rails, e obtenho o seguinte resultado:

About your application's environment
Ruby version 1.8.6 (i486-linux)
RubyGems version 0.9.4
Rails version 2.0.2
Active Record version 2.0.2
Action Pack version 2.0.2
Active Resource version 2.0.2
Action Mailer version 2.0.2
Active Support version 2.0.2
Edge Rails revision unknown
Application root /home/user/projetos/meuprojeto
Environment development
Database adapter mysql
Database schema version 8

Já no meu servidor:

About your application's environment
Ruby version 1.8.7 (x86_64-linux)
RubyGems version 1.1.1
Rails version 2.0.2
Active Record version 2.0.2
Action Pack version 2.0.2
Active Resource version 2.0.2
Action Mailer version 2.0.2
Active Support version 2.0.2
Application root /home/user/projetos/meuprojeto
Environment development
Database adapter mysql
Database schema version 8

Só uma pequena mudança e um bom estrago…

Poderia mudar a função no text_helper.rb do rails, mas acho que não ficaria legal, então, simplesmente abri o application_helper.rb e criei a função trucar com o mesmo código fonte do rails 1.8.6.


def truncar (text, length = 30, truncate_string = "...")
if text.nil? then return end
l = length - truncate_string.length
if $KCODE == "NONE"
text.length > length ? text[0...l] + truncate_string : text
else
chars = text.split(//)
chars.length > length ? chars[0...l].join + truncate_string : text
end
end

Para usar é a mesma coisa que o truncate original. Ex:

truncar(produto.descricao, 40)

Claro, cheira a gambiarra, mas sou meio newbie mesmo, e até conseguir uma solução mais elegante vou tocando com essa mesmo.