Rota admin e pdv na locaweb não funciona

33 views
Skip to first unread message

Paulo Coutinho

unread,
Dec 2, 2009, 8:22:12 PM12/2/09
to rail...@googlegroups.com
Olá a todos,

Estou com um problema que só persiste na locaweb.

Eu tenho os controllers que pertencem ai ADMIN dentro da pasta "app/controllers/admin" e "app/controllers/pdv" e localmente, quando acesso a url:

http://localhost:3000/admin ou http://localhost:3000/pdv funciona normalmente sem precisar adicionar rotas nem nada.

Mas não sei porque, na locaweb não funciona nem chorando, não sei se precisa adicionar rota para funcionar lá ou algo assim.

Os controllers não são restfull.

Alguém tem idéia do que poderá estar ocorrendo?

Pelo log só aparecer a mensagem dizendo que o controller X não foi encontrado.

Se eu acessar "http://erp.prsolucoes.com/admin/clientes" ocorre o erro:

ActionController::UnknownAction (No action responded to clientes. Actions: arquivo_config and usuario_atual):
  passenger (2.2.5) lib/phusion_passenger/rack/request_handler.rb:95:in `process_request'
  passenger (2.2.5) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
  passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:378:in `start_request_handler'
  passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:336:in `handle_spawn_application'
  passenger (2.2.5) lib/phusion_passenger/utils.rb:183:in `safe_fork'
  passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:334:in `handle_spawn_application'
....

O que pode ser?

--
Atenciosamente,
Paulo Coutinho.
Blog: www.prsolucoes.com/blog
Site: www.prsolucoes.com
Msn:  pa...@prsolucoes.com

Rafael Rosa

unread,
Dec 2, 2009, 8:28:03 PM12/2/09
to rail...@googlegroups.com
Salve,

A pergunta pode ser boba, mas dentro do controller "admin" com uma action chamada "clientes"? Se não está usando controllers restful o padrão é que a primeira parte depois do endereço base seja roteada para um controller e a segunda para uma action, pela mensagem do passenger seu controller admin só tem as actions arquivo_config e usuario_atual.

Atenciosamente,
Rafael Rosa
www.rafaelrosafu.com
www.rubyinside.com.br

Paulo Coutinho

unread,
Dec 2, 2009, 9:23:39 PM12/2/09
to rail...@googlegroups.com
Pois é,

Não sei o porque de dar este erro lá, o rails lá está pensando que "admin/clientes" é controller "admin" e action "clientes", e local ele sabe que o módulo é "admin" e o controller é "clientes".  E agora?

Minhas rotas:

ActionController::Routing::Routes.draw do |map|
   
    # rota para controller inicial
    map.root :controller => 'home'
   
    # rota para novo endereço do cliente
    map.cliente_endereco_novo '/admin/clientes_enderecos/adicionar/:cliente', :controller => '/admin/clientes_enderecos', :action => 'adicionar'
   
    # rota para nova devolução
    map.devolucao_novo '/admin/devolucoes/adicionar/:saida', :controller => '/admin/devolucoes', :action => 'adicionar'
   
    # rotas padrões para todos   
    map.connect ':controller/:action/:id'
    map.connect ':controller/:action/:id.:format'   
   
end


2009/12/2 Rafael Rosa <rafael...@gmail.com>

Maurício Linhares

unread,
Dec 2, 2009, 9:30:45 PM12/2/09
to rail...@googlegroups.com
Será que não é essa barra no nome do controller?

Deveria ser apenas :controller => 'admin/clientes'

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr



2009/12/2 Paulo Coutinho <pa...@prsolucoes.com>:

Paulo Coutinho

unread,
Dec 2, 2009, 9:33:51 PM12/2/09
to rail...@googlegroups.com
Barra aonde?





2009/12/3 Maurício Linhares <linhares...@gmail.com>

Maurício Linhares

unread,
Dec 2, 2009, 9:35:34 PM12/2/09
to rail...@googlegroups.com
map.devolucao_novo '/admin/devolucoes/adicionar/:saida',
:controller => '/admin/devolucoes', :action => 'adicionar'

:controller => '/admin/devolucoes'

Não tem essa barra antes de admin.

Paulo Coutinho

unread,
Dec 2, 2009, 9:38:59 PM12/2/09
to rail...@googlegroups.com
Ah, eu tirei mas não mudou nada, até porque essas 2 rotas pode desconsiderar, pois não influencia nas outras.

O problema é que qualquer controller dentro do modulo "admin" não abre lá na locaweb, local funciona tudo normal.




2009/12/3 Maurício Linhares <linhares...@gmail.com>

Paulo Coutinho

unread,
Dec 2, 2009, 9:53:26 PM12/2/09
to rail...@googlegroups.com
Isso deve ser algum erro do passenger na locaweb, algum configuração, sei lá o que.

Pois eu tenho outros sites que funcionam perfeitamente desta forma lá na locaweb.

Somente quando acontece alguma coisa, dá essas loucuras.

Meu sistema de mala direta está funcionando perfeitamente assim, todos os controller do admin eu ponho a barra antes, pois senão o rails gera o link partir de onde você está e não da raiz, a barra está correta.

O problema não é a barra. é algo que até hoje eu não descobri e só acontece lá na locaweb.

Queria tentar resolver com rotas, mas está difícil descobrir como, pois não queria ter que criar 1 rota para cada controller.




2009/12/3 Paulo Coutinho <pa...@prsolucoes.com>

Pedro Fernandes Steimbruch

unread,
Dec 2, 2009, 9:54:55 PM12/2/09
to rail...@googlegroups.com
Deixa eu ver se entendi.
Você tem controles que estão na pasta app/cotrollers/admin/ ?
Caso seja isso, como estão declaradas as classes de cada controle?

# class Admin::FooController < AplicationController

Botasse o namespace nelas?

Att,
Pedro Fernandes Steimbruch.

Maurício Linhares

unread,
Dec 2, 2009, 9:56:03 PM12/2/09
to rail...@googlegroups.com
2009/12/2 Paulo Coutinho <pa...@prsolucoes.com>:

> Isso deve ser algum erro do passenger na locaweb, algum configuração, sei lá
> o que.
>
> Pois eu tenho outros sites que funcionam perfeitamente desta forma lá na
> locaweb.
>
> Somente quando acontece alguma coisa, dá essas loucuras.
>
> Meu sistema de mala direta está funcionando perfeitamente assim, todos os
> controller do admin eu ponho a barra antes, pois senão o rails gera o link
> partir de onde você está e não da raiz, a barra está correta.
>

Colocar a barra no nome do controller não tem nenhum relacionamento
com o fato do rails gerarr o link com barra ou não, todos os links
gerados com um url_for vão ser gerados com "/".

Você já tentou rodar a sua aplicação localmente com o RAILS_ENV sendo
"production"?

Paulo Coutinho

unread,
Dec 2, 2009, 10:02:21 PM12/2/09
to rail...@googlegroups.com
@Pedro, sim claro, todas tem, senão com certeza não funcionaria nem local.

class Admin::ClientesController < AdminController

@Maurício

A relação da barra existe sim para o rails saber de onde começar a gerar o link, por exemplo.

Se você estiver no controller:
"/admin/clientes/adicionar"

E você precisa gerar um link para a página de contatos, não do admin, mas da home, como você faz?

É só fazer :controller => "/contato" pois se você fizer :controller => "contato" ele vai pensar que você quer o controller do módulo "admin"





2009/12/3 Maurício Linhares <linhares...@gmail.com>

Rafael Rosa

unread,
Dec 2, 2009, 10:03:23 PM12/2/09
to rail...@googlegroups.com
Salve,

Quando você diz que admin é um módulo entendo que você esteja usando admin como namespace. Se fosse estivesse utilizando restful, diria para você usar map.namespace para acertar isso, mas como não é o caso o problema parece estar nas
rotas nomeadas. Adiciona a seguinte linha antes dos outros map.connect:

  map.connect 'admin/:controller/:action', :namespace => 'admin'

Isso deve fazer com que todos as coisas que começem com admin sejam mapeadas para o namespace correto.

--

Maurício Linhares

unread,
Dec 2, 2009, 10:04:17 PM12/2/09
to rail...@googlegroups.com
Nops, :controller => "contato" é sempre pro controller contato, só vai
ser pro controller admin se você fizer :controller => 'admin/contato',
mas isso não vem ao caso do seu problema né :)

Rodou com o env pra production aí?
2009/12/3 Paulo Coutinho <pa...@prsolucoes.com>:

Pedro Fernandes Steimbruch

unread,
Dec 2, 2009, 9:57:01 PM12/2/09
to rail...@googlegroups.com
Acho que foi erro meu.

Relendo teu email, percebi que está funcionando localmente. Desculpa meu relapso haha.

Abraços,
Pedro F. Steimbruch.

Paulo Coutinho

unread,
Dec 2, 2009, 10:16:03 PM12/2/09
to rail...@googlegroups.com
@Rafael, esta solução não resolveu, no log ele diz que não encontrou a "action" cliente dentro do controller "admin"





2009/12/3 Rafael Rosa <rafael...@gmail.com>

Rafael Rosa

unread,
Dec 2, 2009, 10:19:51 PM12/2/09
to rail...@googlegroups.com
Salve,

E se você tentar chamar http://erp.prsolucoes.com/admin/clientes/index ?? O mapeamento que te passei só vai funcionar se a URL tiver 4 partes. Se quiser capturar as URLs com três partes vai ter que adicionar

map.connect 'admin/:controller/', :namespace => 'admin', :action => 'index'

Paulo Coutinho

unread,
Dec 2, 2009, 10:22:57 PM12/2/09
to rail...@googlegroups.com

Paulo Coutinho

unread,
Dec 2, 2009, 10:23:37 PM12/2/09
to rail...@googlegroups.com
@mauricio

troquei para production e rodou sem problemas da mesma forma, localmente.



2009/12/3 Maurício Linhares <linhares...@gmail.com>

Rafael Rosa

unread,
Dec 2, 2009, 10:30:13 PM12/2/09
to rail...@googlegroups.com
Localmente você está rodando passenger 2.2.5 ?

Paulo Coutinho

unread,
Dec 2, 2009, 10:31:56 PM12/2/09
to rail...@googlegroups.com
Não, uso o mongrel.

O passenger é da locaweb.



2009/12/3 Rafael Rosa <rafael...@gmail.com>

Rafael Rosa

unread,
Dec 2, 2009, 10:36:17 PM12/2/09
to rail...@googlegroups.com
Recomendo que você tente instalar o Passenger 2.2.5 e rodar a aplicação com ele, pode ser um bug específico dessa combinação, bem como usar a mesma versão do ruby e também vendorizar suas gems. Só assim você poderá ter certeza que o problema não é de ambiente.

Paulo Coutinho

unread,
Dec 2, 2009, 10:41:30 PM12/2/09
to rail...@googlegroups.com
Olá Rafael,

O problema é que aqui é windows :(

Vendorizar as gems ísso já fiz, tanto as gems como o rails (2.3.5).

Mas o que não entendo, é o porque de outras aplicações funcionarem utilizando a mesma estrutura.

Se nenhuma funcionasse tudo bem, mas tem várias outras aplicações nessa estrutura que é a estrutura padrão que uso.




2009/12/3 Rafael Rosa <rafael...@gmail.com>

Rafael Rosa

unread,
Dec 2, 2009, 10:48:07 PM12/2/09
to rail...@googlegroups.com
Salve,

Realmente é estranho, deve haver algum problema que conseguimos enxergar. Se tiver tempo, tente adicionar um novo método ao controller, tipo teste_xyz, refaça o deploy e veja se ele aparece na lista de métodos que o passenger encontra. Algo me diz que pode ser um problema com a reinicialização após o deploy.

Paulo Coutinho

unread,
Dec 2, 2009, 10:54:01 PM12/2/09
to rail...@googlegroups.com
Isso que você disse sobre reinicilização tem lógica, pois muitas das vezes resolvi este problema apagando toda a pasta da aplicação na locaweb e enviando via FTP denovo. Isso várias vezes já resolveu.

E o problema começa muita das vezes ai.

Como hoje, a aplicação já estava funcionando perfeitamente lá na locaweb, ai fui mudar só a versão do rails, e apaguei toda a aplicação lá do servidor e enviei denovo, e BUM, deu esse mesmo problema.

Vou ficar aqui apagando e enviando para ver se funciona.



2009/12/3 Rafael Rosa <rafael...@gmail.com>

Paulo Coutinho

unread,
Dec 2, 2009, 11:34:50 PM12/2/09
to rail...@googlegroups.com
Olá,

Acabei baixando aqui o JRuby, que deu o mesmo erro que na locaweb, então o erro deve estar nas rotas mesmo, mas não tenho agora a menor idéia do que seja.

Rodando sem o JRuby funciona, e na locaweb com passenger e no JRuby não funcionam, apresentam o mesmo erro acima, interpretando o admin como controller e o clientes como action.

Obs 1: Tanto no JRuby como no Ruby normal, estou usando o mongrel.

Obs 2: O JRuby é muito BOM!!! Ele roda tão rápido que nem precisa CLICAR nos links, basta apontar e ele já abre :)
Extremamente rápido o JRuby, fiquei realmente impressionado.
Rodou os meus sistemas todos sem problemas, a unica coisa que tive que alterar no código, foi 1 linha simples no database.yml, que era para usar o adaptador: jdbcmysql, mais nada.

development:
  adapter: jdbcmysql

Para fazer uma aplicação console interagir com o swing por exemplo:

#teste.rb

include Java
frame = javax.swing.JFrame.new()
frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!'))
frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)
frame.pack()
frame.set_visible(true)

#prompt do DOS

jruby teste.rb




2009/12/3 Paulo Coutinho <pa...@prsolucoes.com>

Paulo Coutinho

unread,
Dec 2, 2009, 11:46:27 PM12/2/09
to rail...@googlegroups.com
O que foi que eu disse.

Bastou apagar toda a pasta na locaweb e enviar tudo denovo, mantendo as rotas como estavam, como se nada tivesse acontecido :[

Apaguei e enviei tudo denovo e tudo voltou a funcionar ahuahuahuahua



2009/12/3 Paulo Coutinho <pa...@prsolucoes.com>

Rafael Rosa

unread,
Dec 3, 2009, 8:30:11 AM12/3/09
to rail...@googlegroups.com
Salve,

Fazer deploy com FTP ninguém merece :) O Capistrano deve funcionar no Windows, recomendo que você o utilize para evitar problemas de deploy. Quando usamos o passenger é necessário fazer um touch restart.txt para reiniciá-lo, fazendo as coisas via ftp você pode esquecer de fazer isso. No caso específico da Locaweb você pode usar a gem Locarails[1], mas aparentemente há restrições para rodar no Windows.

Agora, não entendi o lance do JRuby com Passenger, me parece uma combinação mega bizarra, parece que oficialmente não há suporte[2].

[1] http://github.com/akitaonrails/locarails
[2] http://code.google.com/p/phusion-passenger/issues/detail?id=145

Paulo Coutinho

unread,
Dec 3, 2009, 11:25:29 AM12/3/09
to rail...@googlegroups.com
Eu não uso o JRuby com Passenger, mas somente o JRuby mesmo, ele roda o Ruby 1.8.7

Quanto ao touch, eu sempre faço depois de enviar os arquivos e sempre funciona.

Enviar pelo capistrano creio que demore, via ftp eu envio 10 arquivos de uma vez, em instantes ta tudo lá.



2009/12/3 Rafael Rosa <rafael...@gmail.com>

Paulo Coutinho

unread,
Dec 7, 2009, 3:14:16 PM12/7/09
to rail...@googlegroups.com
Olá pessoal,

Ainda não encontrei uma solução para essas rotas que funcione no JRuby.

Também postei na lista do Rails internacional, e até agora ninguém conseguiu uma solução para isto.

Acredito ser algo simples, mas sinceramente não entendo o porque deste problema.

Se você tem o namespace já "admin" dentro da pasta "controllers" e se os controllers do admin já possuem a declaração "Admin::" então era para funcionar perfeitamente. Mas se alguém ai tiver alguma luz, por favor, poste aqui.

Pois no JRuby, está dando o mesmo problema que as vezes ocorre na locaweb, ele pensa que "admin" é controller e "clientes" é a action do controller, para uma url deste tipo: http://localhost:3000/admin/clientes/adicionar

Então teria que ter uma rota que redirecionasse tudo o que for "admin/*" para "admin/:controller".

:(


2009/12/3 Paulo Coutinho <pa...@prsolucoes.com>
Reply all
Reply to author
Forward
0 new messages