O SDK do Cloud inclui um servidor de desenvolvimento local (dev_appserver.py
) que pode ser executado localmente para simular o aplicativo em execução no App Engine de produção.
O ambiente simulado reforça algumas restrições de sandbox, como funções de sistema e importações de módulo do Python 2, mas não outras, como tempo limite de solicitação ou cotas.
O servidor de desenvolvimento local também simula os serviços fornecidos pelas bibliotecas no SDK do App Engine, incluindo Datastore, Memcache e filas de tarefas, por meio da execução local das respectivas tarefas. Quando o aplicativo está sendo executado no servidor de desenvolvimento, ainda é possível fazer chamadas de API remotas para a infraestrutura de produção usando os endpoints HTTP das APIs do Google.
Como executar o servidor de desenvolvimento local
Depois de criar
o arquivo de configuração
app.yaml
para seu aplicativo, inicie o servidor de desenvolvimento local com o
comando dev_appserver.py
para executá-lo localmente.
Para iniciar o servidor de desenvolvimento local:
Como executar o servidor de desenvolvimento local (dev_appserver.py
)
Para executar o servidor de desenvolvimento local, execute o comando dev_appserver.py
especificando o caminho completo do diretório ou adicione dev_appserver.py
à
variável de ambiente PATH: A ferramenta está localizada em [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
.
Dica: para adicionar as ferramentas do SDK do Google Cloud ao seu PATH e ativar a conclusão do comando no seu shell bash, você pode executar:
[PATH_TO_CLOUD_SDK]/google-cloud-sdk/install.sh
-
Execute o comando
dev_appserver.py
da seguinte maneira no diretório que contém o arquivo de configuraçãoapp.yaml
do aplicativo:Especifique o caminho do diretório para seu aplicativo, por exemplo:
dev_appserver.py [PATH_TO_YOUR_APP]
Se preferir, você pode informar o arquivo de configuração de um serviço específico, por exemplo:
dev_appserver.py app.yaml
Para alterar a porta, inclua a opção
--port
:dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
O dev_appserver.py não funciona?
Para saber mais sobre as opções de comando
dev_appserver.py
, consulte Opções do servidor de desenvolvimento local. -
O servidor de desenvolvimento local já está sendo executado e detectando solicitações. Você pode visitar http://localhost:8080/ no seu navegador da Web para ver o aplicativo em ação.
Caso tenha especificado uma porta personalizada com a opção
--port
, lembre-se de abrir seu navegador para ela.
Para parar o servidor local pela linha de comando, pressione:
- macOS ou Linux: Control-C
- Windows: Control-Break
Como especificar IDs do aplicativo
Para acessar o ID do aplicativo no servidor local, por exemplo, para falsificar um endereço de e-mail, use a função get_application_id()
. Para receber o nome do host do aplicativo em execução, use a função get_default_version_hostname()
.
Como detectar o ambiente de execução do aplicativo
Para determinar se o código está sendo executado no servidor de desenvolvimento de produção ou local, verifique a variável de ambiente SERVER_SOFTWARE
:
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
Como usar o Datastore local
O servidor de desenvolvimento local simula o armazenamento de dados do App Engine usando um arquivo local que persiste entre invocações do servidor local.
Para mais informações sobre índices e index.yaml
, consulte as páginas Índices do Datastore e Configuração do índice do Datastore.
Como navegar no Datastore local
Se seu aplicativo tiver gravado dados no seu Datastore local usando o servidor de desenvolvimento local, você pode navegar nele pelo console de desenvolvimento local.
Para navegar no Datastore local:
Acesse o Leitor do Datastore no console de desenvolvimento local. O URL é
http://localhost:8000/datastore
.Veja o conteúdo do Datastore local.
Como especificar a política de alocação de códigos
Para o App Engine de produção, defina o Datastore para gerar automaticamente códigos da entidade.
Embora as políticas de atribuição automática de IDs para o servidor de produção sejam completamente diferentes das usadas pelo servidor de desenvolvimento, é possível configurar a política de alocação automática de IDs para o servidor local.
Para especificar a política de atribuição automática de IDs, use a opção --auto_id_policy
:
dev_appserver.py --auto_id_policy=sequential
em que --auto_id_policy
é uma das seguintes opções:
scattered
: (padrão) os IDs são atribuídos de uma sequência sem repetições de números inteiros distribuídos de maneira quase uniforme.sequential
: os IDs são atribuídos da sequência de números inteiros consecutivos.
Como limpar o Datastore local
Para limpar o armazenamento de dados local de um aplicativo, invoque o servidor de desenvolvimento local da seguinte forma:
dev_appserver.py --clear_datastore=yes app.yaml
Como alterar a localização do Datastore local
Para alterar o local usado para o arquivo de armazenamento de dados, use a opção --datastore_path
:
dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
Como usar o serviço Usuários
O App Engine fornece um Serviço usuários para simplificar a autenticação e autorização para seu aplicativo. O servidor de desenvolvimento local simula o comportamento das Contas do Google com suas próprias páginas de login e logout. Durante a execução no servidor de desenvolvimento local, as funções users.create_login_url
e users.create_logout_url
retornam URLs para /_ah/login
e /_ah/logout
no servidor local.
Como usar o e-mail
O servidor de desenvolvimento local pode enviar e-mails para chamadas do serviço de e-mail do App Engine usando um servidor SMTP ou uma instalação local do Sendmail.
Como usar SMTP
Para ativar o suporte a e-mail com um servidor SMTP, invoque dev_appserver.py
da
seguinte maneira:
dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
--smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]
em que você define as opções --smtp_host
, --smtp_port
, --smtp_user
e
--smtp_password
com seus próprios valores.
Como usar o Sendmail
Para ativar o suporte a e-mail com o Sendmail, invoque dev_appserver.py
desta forma:
dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
O servidor local usará o comando sendmail
para enviar mensagens de e-mail com
a configuração padrão da instalação.
Como usar a busca de URL
Quando o aplicativo usa a API de busca de URL para fazer uma solicitação HTTP, o servidor de desenvolvimento local efetua a solicitação diretamente do seu computador. O comportamento de busca de URL no servidor local pode ser diferente do App Engine de produção se você usar um servidor proxy para acessar sites.
Como usar o console interativo
O console interativo permite que desenvolvedores inseriram um código Python arbitrário em um formulário da Web e o executem dentro do ambiente do aplicativo. Isso fornece o mesmo acesso ao ambiente e aos serviços do aplicativo que um arquivo .py dentro do próprio aplicativo.
Para usar o console interativo:
Acesse o console interativo no console de desenvolvimento local. (O URL é
http://localhost:8000/console
.)Insira na área de texto o código Python que quiser e envie o formulário para executá-lo. Por exemplo, o código a seguir adicionará uma entidade do Datastore chamada
Greeting
com o textoHello
:from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
Como depurar com PDB
Para usar o depurador PDB do Python:
Adicione esta linha ao código:
import pdb; pdb.set_trace();
O
dev_appserver
será interrompido nesse momento e será solto no REPL do PDB, permitindo depurar seu código da linha de comando.Se o aplicativo fizer várias solicitações simultâneas que invoquem
pdb.set_trace()
, várias sessões de depuração serão iniciadas ao mesmo tempo e cada uma enviará saída paraSTDOUT
. Para evitar isso, serialize suas solicitações desativando o suporte de várias linhas de execução e vários processamentos adev_appserver
, da seguinte maneira:Desative as várias linhas de execução para:
- todos os serviços que usam a sinalização
--threadsafe_override=false
; - um serviço que usa a sinalização
--threadsafe_override=<SERVICENAME>:false
; - vários serviços que usam a sinalização
--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
.
- Desative os vários processamentos para:
- todos os serviços que usam a sinalização
--max_module_instances=1
; - um serviço que usa a sinalização
--max_module_instances=<SERVICENAME>:1
; - vários serviços que usam a sinalização
--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
.
- todos os serviços que usam a sinalização
- todos os serviços que usam a sinalização