Pergunta

Sempre que duas solicitações HTTP simultâneas vão para o meu aplicativo Rails, o segundo sempre retorna o seguinte erro:

Uma cópia do ApplicationController foi removida da árvore do módulo, mas ainda está ativa!

A partir daí, dá um rastreamento inútil de pilha para o efeito de "Nós passamos pelo material do servidor padrão, executamos seu primeiro antes_filter no ApplicationController (e eu verifiquei; é o filtro que é executado primeiro)", então oferece o seguinte:

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:414:in `load_missing_constant '

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:96:in `const_missing '

O que estou assumindo ser uma resposta genérica e realmente não diz muito.

O Google parece me dizer que as pessoas que desenvolvem motores Rails encontrarão isso, mas eu não faço isso. Tudo o que fiz é atualizar meu aplicativo Rails de 2.2 (2.1?) Para 2.3.

Quais são algumas causas possíveis para esse erro e como posso rastrear o que realmente está acontecendo? Eu sei que essa pergunta é vaga, então alguma outra informação seria útil?

Mais importante: tentei fazer um teste em um ambiente de "produção" agora, e o erro não parece persistir. Isso afeta apenas o desenvolvimento, então e não preciso muito?

Foi útil?

Solução

Este é um bug no Rails 2.3.3:

Existe um patch para isso (mas incompleto?) Em 2-3 estável:

Você tem algumas opções para resolver o problema:

  • Reverter para Rails 2.3.2, aguarde 2.3.4 sair, provavelmente no final de agosto. 2.3.3 tem alguns problemas ruins, então pode ser melhor.
  • O problema não deve acontecer no modo de produção, nem acontecerá no modo de desenvolvimento sob o Fino servidor. Se você está tendo esse problema nos mecanismos do Google no modo de produção, o patch é sua única esperança. Se for apenas no modo dev, basta executar o servidor local com fino em vez de mexrel.
  • Se forem os mecanismos do Google, Você pode sair dos mecanismos do Google e hospedar seu aplicativo de outra maneira. Isso parece muito trabalho.

Boa sorte, este é um inseto muito ruim que muitas pessoas estão se encontrando.

Outras dicas

Além das soluções alternativas mencionadas nas outras respostas, encontrei outras duas:

  1. Adicionar "config.cache_classes = false" ao seu arquivo config/ambientes/desenvolvimento.rb. Isso tem o infeliz efeito colateral de exigir que você reinicie seu servidor sempre que quiser ver suas alterações.
  2. Adicione 'descarregável' nas classes do controlador no seu mecanismo. Ver http://strd6.com/?p=250 e http://dev.rubyonrails.org/ticket/6001

Não tentei a segunda abordagem, pois encontrei a outra solução primeiro, mas é claro que há uma troca entre evitar ter que editar o código do plug-in, que pode ser revertido se uma versão mais recente do plug-in for baixada e, em seguida, A facilidade de desenvolvimento fornecida por não ter que reiniciar o servidor de desenvolvimento o tempo todo na segunda solução.

Eu enfrentei o mesmo problema para o meu novo motor no Rails 2.3.4 e encontrei solução aqui.

chamando descarregável O método resolveu meu problema.

Esquisito.

Tentando executar "Rake Rails: Atualize" para garantir que as configurações sejam scripts estão atualizadas. Pode ser necessário verificar os existentes em um aplicativo de modelo.

Eu tive esse erro e, por memória, foi uma dessas três coisas que o consertaram.

1) Eu precisava atualizar o MonGrel/Rack 2) Eu tinha uma variável de ambiente da autenticação RESTful que havia mudado para a produção.rb e desenvolvimento.rb arquivos do ambiente.rb - mudando para o ambiente.rb parecia ajudar 3 ) Will_Paginate estava desatualizado

Chamamos um modelo ActiveRecord em um módulo de namespaced que substitui o método da classe "nome". O Rails espera que o método de nome retorne o produto :: categorias :: MilkProducts :: FirstProduct, mas recebe apenas o primeiro produto e lança um erro. Portanto, se você receber esse erro, verifique se você redefiniu o self.name.

  • FirstProduct.Method (: Nome). Proprietário deve ser módulo
  • FirstProduct.method (: nome) .source_location

fonte:

module Product::Categories::MilkProducts
  class Base
    def self.name
      self.to_s.demodulize
    end
  end
  class Firstproduct < Base
    self.product = Product.first
  end
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top