Usar o servidor de desenvolvimento local

O servidor de desenvolvimento local emula o ambiente de tempo de execução do Java do App Engine e todos os respetivos serviços, incluindo o Datastore.

Antes de começar

Uma vez que o Java 8 atingiu o fim do apoio técnico, já não pode usar a versão mais recente do dev_appserver.py para executar localmente as suas aplicações. Para transferir uma versão arquivada do devapp_server.py, siga estes passos:

  1. A partir do arquivo, transfira a pasta comprimida que contém o dev_appserver.py servidor para tempos de execução que atingiram o fim do apoio técnico.

  2. Extraia o conteúdo do diretório para o seu sistema de ficheiros local, como para o diretório /home. Pode encontrar o dev_appserver.py no diretório google_appengine/google/appengine/tools/java/bin.

Executar o servidor Web de programação

Para obter informações sobre como definir as propriedades do sistema e as variáveis de ambiente para a sua app, consulte Como os pedidos são processados.

Também pode executar o servidor Web de desenvolvimento a partir de uma linha de comandos. O comando a executar encontra-se no diretório do SDK com o caminho relativo google_appengine/google/appengine/tools/java/bin.

Sintaxe de comandos do Windows:

google_appengine\google\appengine\tools\java\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Sintaxe de comandos do Linux ou macOS:

google_appengine/google/appengine/tools/java/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

O comando usa a localização do diretório WAR da sua aplicação como um argumento.

Parar o servidor de desenvolvimento

Para parar o servidor Web, prima Ctrl-C.

Detetar o ambiente de tempo de execução da aplicação

Para determinar se o seu código está a ser executado em produção ou no servidor de desenvolvimento local, pode verificar o valor do método SystemProperty.environment.value(). Por exemplo:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

Usar o emulador do Datastore local

O servidor Web de desenvolvimento simula o Datastore através de um Datastore local suportado por ficheiros no seu computador. O Datastore tem o nome local_db.bin e é criado no diretório WAR da sua aplicação, no diretório WEB-INF /appengine-generated/. Não é carregado com a sua aplicação.

Este Datastore persiste entre invocações do servidor Web, pelo que os dados que armazena continuam disponíveis na próxima vez que executar o servidor Web. Para limpar o conteúdo do Datastore, encerre o servidor e, em seguida, elimine este ficheiro.

Conforme descrito na configuração do índice do armazenamento de dados, o servidor de desenvolvimento pode gerar a configuração dos índices do armazenamento de dados necessários pela sua aplicação, determinada a partir das consultas que executa enquanto a testa. Isto gera um ficheiro denominado datastore-indexes-auto.xml no diretório WEB-INF/appengine-generated/ no WAR. Para desativar a configuração automática do índice, crie ou edite o ficheiro datastore-indexes.xml no diretório WEB-INF/, usando o atributo autoGenerate="false" para o elemento <datastore-indexes>.

Navegar no Datastore no servidor de desenvolvimento

Para procurar o seu Datastore local através do servidor Web de desenvolvimento:

  1. Inicie o servidor de programação conforme descrito anteriormente.
  2. Aceda à consola de desenvolvimento.
  3. Clique em Datastore Viewer no painel de navegação esquerdo para ver o conteúdo do Datastore local.

O modelo de consistência do armazenamento de dados

Por predefinição, o Datastore local está configurado para que a percentagem de gravações do Datastore que não são imediatamente visíveis em consultas globais seja definida como 10%.

Para ajustar este nível de consistência, defina a propriedade do sistema datastore.default_high_rep_job_policy_unapplied_job_pct com um valor correspondente à quantidade de consistência eventual que quer que a sua aplicação veja.

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

Se estiver a definir esta propriedade através da linha de comandos java_dev_appserver.sh, tem de usar --jvm_flag=... para definir a propriedade:

google_appengine/google/appengine/tools/java/bin/java-dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

O intervalo válido para datastore.default_high_rep_job_policy_unapplied_job_pct é entre 0 e 100. Se usar números fora deste intervalo, recebe um erro.

Especificar a política de atribuição automática de IDs

Pode configurar a forma como o Datastore local atribui IDs de entidades automáticos .

As seguintes políticas de atribuição automática de IDs são suportadas no servidor de desenvolvimento:

sequential
Os IDs são atribuídos a partir da sequência de números inteiros consecutivos.
scattered
Os IDs são atribuídos a partir de uma sequência não repetitiva de números inteiros distribuídos de forma aproximadamente uniforme.

A política predefinida no Datastore local é scattered.

Para especificar a política de ID automático, defina a propriedade do sistema datastore.auto_id_allocation_policy como sequential ou scattered.

-Ddatastore.auto_id_allocation_policy=scattered

Para definir esta propriedade do sistema através de uma flag transmitida à macro dev_appserver:

java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

Simular contas de utilizador

O servidor Web de desenvolvimento simula as Contas Google com as suas próprias páginas de início e fim de sessão. Quando executados no servidor Web de programação, os métodos que geram URLs de início de sessão e de fim de sessão devolvem URLs para /_ah/login e /_ah/logout no servidor local.

A página de início de sessão de desenvolvimento inclui um formulário onde pode introduzir um endereço de email. A sua sessão usa o endereço de email que introduzir como utilizador ativo.

Para que a aplicação considere que o utilizador com sessão iniciada é um administrador, selecione a caixa de verificação "Iniciar sessão como administrador" no formulário.

Usar a obtenção de URLs

Quando a sua aplicação usa a API URL Fetch para fazer um pedido HTTP, o servidor Web de desenvolvimento faz o pedido diretamente a partir do seu computador. O comportamento pode ser diferente de quando a sua aplicação é executada no App Engine se usar um servidor proxy para aceder a Websites.

A consola de programação

O servidor Web de programação inclui uma aplicação Web de consola. Com a consola, pode procurar no Datastore local.

Para aceder à consola, visite o URL /_ah/admin no seu servidor: http://localhost:8080/_ah/admin

Argumentos da linha de comandos

O comando do servidor de desenvolvimento suporta os seguintes argumentos da linha de comandos:

--address=...

O endereço do anfitrião a usar para o servidor. Pode ter de definir esta opção para poder aceder ao servidor de desenvolvimento a partir de outro computador na sua rede. Um endereço de 0.0.0.0 permite o acesso ao localhost e o acesso ao nome do anfitrião. Predefinição: localhost.

--default_gcs_bucket=...

Defina o nome do contentor do Google Cloud Storage predefinido.

--disable_update_check

Se for fornecido, o servidor de desenvolvimento não contacta o App Engine para verificar a disponibilidade de uma nova versão do SDK. Por predefinição, o servidor verifica se existe uma nova versão no arranque e imprime uma mensagem se estiver disponível uma nova versão.

--generated_dir=...

Defina o diretório onde os ficheiros gerados são criados.

--help

Imprime uma mensagem útil e, em seguida, termina.

--jvm_flag=...

Transmita a flag especificada como um argumento da JVM. Pode ser repetido para fornecer várias flags.

--port=...

O número da porta a usar para o servidor. A predefinição é 8080.

--sdk_root=...

Um caminho para a CLI gcloud, se for diferente da localização da ferramenta.

--server=...

O servidor a usar para determinar a versão mais recente do SDK.