Este repositório contém o código para wikispeedruns.com.
Recomendamos a criação de um ambiente virtual Python para executar o servidor.
python -m venv env
Para Windows Powershell:
./env/Scripts/Activate.ps1
Para Linux/baseado em Unix (Mac)
source env/bin/activate
Em seguida, instale os requisitos (com seu ambiente virtual ativado)
pip install -r requirements.txt
Em seguida, instale os requisitos (com seu ambiente virtual ativado)
npm install
Existem vários scripts para ajudar a configurar o aplicativo da web em scripts.
Assim que o servidor MySQL estiver em execução, você precisará criar uma conta. Por padrão, assumimos uma conta de user
sem senha (consulte default.json
). Se desejar usar uma configuração diferente do MySQL, você pode criar prod.json
com os campos relevantes do MySQL na config
que substituirão default.json
.
Em seguida, crie o banco de dados e as tabelas usando o script fornecido.
cd scripts
python create_db.py
Há também um script interativo (com instruções nos scripts) que pode ser usado para configurar uma conta de administrador local. Através da conta de administrador, os prompts podem ser gerenciados através de /manage
.
cd scripts
python create_admin_account.py
(Opcional) Por fim, existe também um script para preencher o banco de dados com dados para desenvolvimento local
cd scripts
python populate_db.py
Defina a variável de ambiente FLASK_ENV
em qualquer prompt de comando que você planeja usar para executar o servidor flask. Isso permitirá que a instância local seja recarregada automaticamente quando os arquivos forem alterados.
Por exemplo, em Linux/Mac
export FLASK_DEBUG=1
export FLASK_ENV="development"
Ou no Windows Powershell
$env:FLASK_ENV="development"
Do diretório de nível superior
npm run start
Em um shell separado, no diretório de nível superior
flask --app app run --debug
Para executar os testes localmente, você precisa criar outra conta no MYSQL com nome de usuário testuser
e senha testpassword
. Nossos testes são configurados para serem executados nesta conta por padrão.
Em seguida, basta executar o pytest no diretório test
.
cd test
pytest
Observe que esses testes também são executados no Docker ao fazer um PR usando fluxos de trabalho do Github. No futuro, poderemos configurar o docker para executar testes também.
As conquistas são adicionadas ao banco de dados por meio de scripts python. Execute estes scripts python com seu ambiente virtual habilitado para preencher tabelas de conquistas:
scriptsachievementadd_achievements_to_database.py
Quaisquer execuções futuras serão verificadas em relação às conquistas no banco de dados. Também podemos aplicar essas regras de verificação a execuções anteriores.
Execute este script python para verificar retroativamente as execuções históricas em relação a todas as conquistas atuais.
scriptsachievementhistorical_achievements.py
A fila de tarefas assíncronas para tarefas de raspador é suportada por 2 ferramentas extras, aipo e redis. O Celery é instalado como um requisito do python, mas o redis (https://redis.io/) precisa ser instalado e executado separadamente (semelhante ao servidor SQL, consulte o site para obter instruções). O scraper task_queue também requer o scraper_graph
, que pode ser baixado localmente (entre em contato com um dos mantenedores)
Em vez de calcular o caminho como parte da solicitação, o que congela o servidor, o flask transfere as tarefas do raspador para outro processo gerenciado pelo celery (e se comunica por meio de redis). Essas tarefas são definidas usando decoradores python, exemplos dos quais podem ser vistos aqui.
Infelizmente, nem o aipo nem o redis são suportados no Windows. Portanto, se você tiver uma máquina de desenvolvimento Windows, terá que executar o servidor por meio de WSL. Observe que se você deseja manter sua instância do MySQL do Windows, você precisa descobrir em qual porta a máquina host do Windows está exposta no WSL. Veja esta postagem de superusuário. Observe que isso muda sempre que o WSL é reiniciado.