A atualização do Ubuntu quebrou o mod_wsgi do django

1

Estou batendo a cabeça aqui e não consigo encontrar as respostas em lugar algum.

Meu servidor está executando o Ubuntu 14.04. Eu corro vários sites de django usando o apache e mod_wsgi Hoje depois de uma atualização, os sites não funcionarão.

Eu posso ver que libapache2-mod-wsgi: amd64 (3.4-4ubuntu2.1.14.04.1, 3.4-4ubuntu2.1.14.04.2) é uma das atualizações

Este erro está aparecendo no log de erros do apache

mod_wsgi (pid=6624): Failure to configure the daemon process correctly and
  process left in unspecified state. Restarting daemon process after delay.

Embora este apareça em um log específico do aplicativo django

Fatal Python error: PyEval_AcquireThread: NULL new thread state
<...>
Script timed out before returning headers: wsgi.py

Não me lembro se eu instale o mod_wsgi usando pip ou não.

Qualquer ponteiro seria ótimo.

    
por Andy1212 17.12.2014 / 13:00

3 respostas

1

Caso você ainda não tenha resolvido isso:

No mod_wsgi 2.0+, você precisa especificar o diretório inicial se estiver usando a diretiva WSGIDaemonProcess. No meu caso eu estava usando um usuário sem um diretório home, e isso estava causando o mesmo erro que você viu.

home=directory

Defines an absolute path of a directory which should be used as the initial current working directory of the daemon processes within the process group. If this option is not defined, in mod_wsgi 1.X the current working directory of the Apache parent process will be inherited by the daemon processes within the process group. Normally the current working directory of the Apache parent process would be the root directory. In mod_wsgi 2.0+ the initial current working directory will be set to be the home directory of the user that the daemon process runs as.

link

    
por 29.12.2014 / 21:33
0

Parece que o mod_wsgi falhará ao iniciar se o daemon não tiver permissões para seus diretórios de trabalho. Do código-fonte:

if (wsgi_setup_access(daemon) == -1) {

         /*
          * If we get any failure from setting up the appropriate
          * permissions or working directory for the daemon process
          * then we exit the process. Don't die immediately to avoid
          * a fork bomb.
          */

         ap_log_error(APLOG_MARK, APLOG_ALERT, 0, wsgi_server,
                      "mod_wsgi (pid=%d): Failure to configure the "
                      "daemon process correctly and process left in "
                      "unspecified state. Restarting daemon process "
                      "after delay.", getpid());
         sleep(20);

         wsgi_exit_daemon_process(-1);
     }
    
por 17.12.2014 / 13:51
0

O comportamento em torno do diretório de trabalho atual para o modo daemon mudou ao longo do tempo.

De volta no tempo, qualquer que fosse o diretório de trabalho atual do Apache, seria usado. Isso geralmente seria '/'.

Em seguida, ele foi alterado para tentar usar o diretório de trabalho do usuário que o processo do daemon executava. Se esse usuário não tivesse um diretório home válido, como às vezes é o caso do usuário padrão do Apache, ele falharia silenciosamente e você ainda ficaria com ele como '/'.

Quando algumas alterações foram feitas como parte de uma limpeza relacionada a problemas de segurança, a falha silenciosa foi removida e, inadvertidamente, ocorreu um erro grave se o usuário não tivesse um diretório base. Isso causou problemas, pois não foi percebido que o usuário do Apache às vezes não tinha um diretório pessoal válido.

Isso acionou uma alteração adicional, de modo que o diretório inicial seria usado apenas se o usuário executar o processo do daemon, como não é o usuário padrão do Apache. Se você estivesse explicitamente configurando o usuário para o processo do daemon para um usuário não Apache e ele não tivesse um diretório inicial, você teria que tomar medidas para definir a opção 'home'.

Portanto, parece que você não está usando a versão mais recente do mod_wsgi, mas uma versão que tem o penúltimo comportamento.

Como algumas distribuições do Linux transportaram algumas das alterações relacionadas a versões mod_wsgi muito mais antigas, quando não era sequer um problema de segurança que exigia que as alterações fossem portadas novamente, elas criaram uma bagunça, já que nunca capturaram a última mude para endereçar que o usuário do Apache não tem um diretório home.

Então, em última análise, seu problema é causado por sua distribuição Linux usando um mod_wsgi desatualizado e, possivelmente, conjuntos de mudanças incompletos portados.

A solução alternativa para você será configurar home = '/' como opção para WSGIDaemonProcess.

Melhor ainda, atualize de alguma forma para a versão mais recente do mod_wsgi em vez da versão antiga que a sua distribuição Linux usa.

A última versão do mod_wsgi 4.4.8. Sua distribuição Linux traz uma versão com mais de 20 versões, então você está perdendo muitas correções de erros e melhorias.

    
por 10.02.2015 / 03:50