Asset pipeline gerando erro interno do servidor

31 views
Skip to first unread message

Cezinha

unread,
Sep 25, 2012, 8:01:09 PM9/25/12
to gur...@googlegroups.com
Olá pessoal! Tudo bem? Eu espero que sim...

Eu estou tentando hospedar na locaweb (em minha hospedagem compartilhada) um pequeno aplicativo Rails, mas tá sendo um parto!

Na máquina de desenvolvimento está tudo rodando bonitinho. Mas quando eu coloco o maldito em produção ele não roda.

Depois de muito bater cabeça eu descobri que o problema está relacionado a asset pipeline. Para os controllers que não dispõe de css ou js específicos, tudo vai bem. Agora se eu crio um css ou um js específico para um controller, o servidor gera um erro de "Premature end of script headers:".

Se eu examino o log do apache eu somente tenho a mensagem acima. Se eu examino o log do rails, ele me diz que a view foi renderizada na boa.

Alguém tem ideia do que pode estar acontecendo?

Mais um detalhe: na locaweb está rodando o ruby 1.8.7., mas imagino que isso não seja o problema, pois eu converti os hashes gerados pelo rails no formato "hash: valor" para "hash => valor" e tudo passou a funcionar. O sistema deixou de funcionar mesmo quando eu comecei a fazer as assets personalizadas para cada controller.

Outro detalhe: infelizmente não tenho como usar outra hospedagem no momento, pois nesta tem um software legado em PHP no qual eu estou convertendo vagarosamente. Enquanto este processo não for finalizado eu não tenho como migrar.

Muito obrigado




Rafael Felix

unread,
Sep 25, 2012, 8:04:38 PM9/25/12
to gur...@googlegroups.com
Cara, 

acho que outros podem dizer melhor, mas acho que o Rails 3 (versão que tem o asset pipeline), não suporta ruby 1.8.7, então você usa Rails <3, ou então usa ruby 1.9.2



2012/9/25 Cezinha <cezinh...@gmail.com>

Cezinha

unread,
Sep 25, 2012, 8:25:48 PM9/25/12
to gur...@googlegroups.com
Oi Felix...

Eu fiz o seguinte... coloquei o ree 1.8.7 na minha rvm local e rodou na boa.

Acho que a treta é outra. 

De qualquer forma eu agradeço a atenção, mas continuo agradecendo novas sugestões.

Cezinha

unread,
Sep 26, 2012, 12:00:57 AM9/26/12
to gur...@googlegroups.com
Olá pessoal... eu refinei um pouco mais o problema...

O app só dá pau em produção quando as linhas abaixo estão no layout:

<%= javascript_include_tag params[:controller] %>
<%= stylesheet_link_tag params[:controller] %>

A intenção destas linhas é carregar para o layout o css e o js específico do controller.

Em desenvolvimento funciona tudo liso, mas em produção na locaweb gera o erro 500 relatado no início desta thread.

Eu realmente não gostaria de sujar as minhas views com js específicos, mas estou me vendo sem saída.

Agradeço se alguém tiver alguma sugestão.

Gustavo Warmling Teixeira

unread,
Sep 26, 2012, 12:06:54 AM9/26/12
to gur...@googlegroups.com
Cezinha, isso esta acontecendo provavelmente pois voce utiliza o asset pipeline para compilar seus assets.

voce precisa especificar o nome de cada arquivo que deve ser compilado para que esse erro nao aconteça nao aconteça

adicione em seu arquivo application.rb em config as seguintes linhas

    config.assets.precompile += %w( controller1.css controller2.css )
    config.assets.precompile += %w( controller1.js controller2.js)

no exemplo acima seria no caso se voce tivesse um tivesse 2 controllers (controller1 e controller2), SIM voce precisa adicionar todos, existe melhores formas de fazer isso, mas dae fica a seu critério, acho que a idéia voce ja entendeu né :D

2012/9/26 Cezinha <cezinh...@gmail.com>



--
"Existem 10 tipos de pessoas. As que entendem código binário e as que não entendem código binário."

www.triremi.com

Cezinha

unread,
Sep 26, 2012, 12:47:22 AM9/26/12
to gur...@googlegroups.com
Olá pessoal... encontrei o problema:

O que está acontecendo é que em produção a asset não consegue compilar os css/js.

Quando eu gerava um rake assets:precompile, o rake só compilava o aplication.* (no meu caso application.js e application.css) - no caso - são os meus arquivos manifestos de diversos outros arquivos que deveriam ser fundidos em um único.

O problema é que ele não compilava os arquivos css/js menores. Eu também não podia declarar tais arquivos dentro dos application.*, pois o conteúdo deles seria fundido em um único arquivo e eu não teria o resultado esperado.

O que eu fiz foi basicamente "ensinar" para o Rails que os meus arquivos css js dos controllers deveriam ser compilados separadamente como se fossem arquivos manifestos separados.

Para isso eu mexi no production.rb fazendo algo semelhante abaixo:

  # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
  config.assets.precompile += %W( usuarios.js )
  config.assets.precompile += %w( usuarios.css )

Com isso o rake assets:precompile conseguiu compilar tudo. Funcionou liso!

Meu desafio agora é encontrar uma expressão regular que possa pegar esses arquivos pra eu não ter que ficar mexendo no production.rb direto.

O legal é que se eu quiser... dá até pra ter css e js separado por action de cada view - obviamente, para o meu caso, é insano!

É isso aí... desculpe tanto movimento na lista e espero que a solução também seja útil pra outros.

Muito obrigado.
Reply all
Reply to author
Forward
0 new messages