Closed cuducos closed 8 years ago
From @ronniery on May 1, 2016 11:4
Para subir um server local de django/py e complicado? Somente com o que está neste README.md é o suficiente? Acho que com isto o segundo item se resolve.
@ronniery Movi a issue para cá pois ela tem a ver com a API (esse repositório), e não com a lista colaborativa em si.
1. Inclusão de novas operadoras
Atualmente o isso é feito somente através do nosso formulário, mas já falamos na Issue #5 de:
.herokuapp.com
), mas no site mesmo (.github.io
)Atualmente o entrypoint /new/
recusa qualquer POST
externo ao internetsemlimites.herokuapp.com
pois usa CSRF — mas podemos mudar isso sem problemas.
No mais, a própria implementação do formulário e do modelo no Django se encarrega da validação dos dados (por exemplo, não validaria um POST
com estado XC, retornaria erro antes de enviar qualquer coisa ao banco de dados).
Se for colocar isso no teu app, me avise e coordenamos as alterações na API (possibilidade de receber POST
externo). Só peço que leia nossas (minha?) ressalvas sobre o formulário: precisamos ajudar o usuário a filtrar melhor o que é enviado — tudo explicadinho na Issue #5.
2. Subir uma aplicação Django
O ideal é que o README.md
dê conta do recado, principalmente se você tiver algum conhecimento prévio de Python. Se tiver dificuldade para subir localmente aí, vá me avisando dos calos que incrementamos a documentação — ou mande PR com sugestões de melhorias ; )
building 'psycopg2._psycopg' extension
.Mas o google resolveu todos os problemas de instalação do ambiente, o único que me resta, e que ao submeter uma requisição (via formulário) para /new
recebo HTTP 500 Internal server Error.
p.s: Meu conhecimento sobre python e igual a 0
Que bom que funcionou! O psycopg2
só é necessário de você for utilizar o Postgres. Em desenvolvimento tudo bem usar o SQLite, não tem muito problema.
Mas… erro 500
? Quando CSRF falha deveria retornar 403
… me passe o POST
que está fazendo para eu reproduzir o erro aqui e ver se está tudo ok, pode ser?
@ronniery o básico de dependências que ajudam a instalar quase todas as bibliotecas python que tem extensões implementadas em linguagem C (como psycopg2
) :
ubuntu 14.04:
sudo apt-get install python-dev python3-dev gettext build-essential zlib1g-dev libpq-dev libtiff4-dev libjpeg8-dev libfreetype6-dev liblcms1-dev libwebp-dev libmemcached-dev libssl-dev graphviz-dev blt tix libxml2-dev libxslt-dev
ubuntu 15.04/15.10/16.04:
sudo apt-get install python-dev python3-dev gettext build-essential zlib1g-dev libpq-dev libtiff5-dev libjpeg8-dev libfreetype6-dev liblcms2-dev libwebp-dev libmemcached-dev libssl-dev graphviz-dev blt tix libxml2-dev libxslt-dev
Olhando no código vi que eu poderia habilitar o stacktrace da aplicação, que segue em googledrive
Exato. Está no .env.sample
(mencionado na documentação) a variável DEBUG
.
Se ela for True
, você tem as mensagens de erro detalhadas.
Mas nunca deixe isso em produção. Nunca.
@ronniery Incrementei a descrição das variáveis do .env
, espero que ajude.
Mais tarde vou ter que estudar um pouco de CORS para ver como abrir o /new/
para POST
externo sem esbarrar em muitos problemas de segurança. Você tem como saber de qual servidor virão essas requisições, ou seria direto do IP do usuário?
Ficaram claras as descrições :+1:
Posso optar por mandar via direto IP do usuário ou centralizar em um servidor Node.js e a partir dele encaminhar as requisições ao /new/
.
Qual fica melhor?
Então, se der na mesma para você, centralizar as requisições em um IP/servidor único acho que dá mais segurança para a aplicação.
O node server irá ficar nesta url https://arcane-waters-62201.herokuapp.com/ (sim nome dado pelo heroku)
Legal, @ronniery. Com o c786ba7 qualquer site/domínio/IP pode usar o endpoint /api/provider/new/
via POST
para criar novos provedores. Pode testar ; ) E depois nos conte se deu certo!
A codificação do meu server local está estranha, como eu altero isto? Por exemplo Goiás (GO), Maranhão (MA), Paraná (PR) e por ai vai acho que é por isto que está dando exceção de charmap...
Onde (qual URL)?
localmente em /new/
o servidor está rodando no windows
Bem estranho. Duas possibilidades a verificar:
python --version
na linha de comando para confirmarAlguma outra ideia, @luzfcb?
Python 3.5.1 O google chrome diz que a codificação e utf-8 por padrão, se eu subir uma máquina virtual com linux e a partir dai subir um server python seria mais eficiente?
@ronniery Era para funcionar normal no Windows também.
Outra possível causa: a tabela de estados no banco de dados é alimentada por um JSON em uma das migrações. O Django já teve problemas de encoding em casos assim, mas teoricamente foram resolvidos… De repente achasse um bug para reportar…
O problema é só no nome dos estados ou em todo caracter não ASCII da página?
@ronniery o Windows por padrão usa uma variação do ISO-8859-1 chamada "Windows-1252" ou "cp-1252" (inclusive no terminal) https://en.wikipedia.org/wiki/Windows-1252, mas todo o resto do mundo usa quase que majoritariamente UNICODE - UTF-8
Eu pessoalmente, odeio, com todas as forças usar windows para desenvolver. O terminal (CMD) é péssimo, é complicado instalar e configurar qualquer coisa que não seja ferramenta desenvolvida pela Microsoft e ainda tem o problema da codificação.
Esse ultimo me dá lembranças terríveis. Trabalhava numa equipe (na secretaria de estado da administração do TO) que mantinha um software Java JSF (desenvolvido por uma empresa externa, que para nossa "sorte" o estado resolveu não pagar direito e eles romperam o contrato) que controlava toda a vida funcional do servidor publico, incluindo a posse. O sistema era desenvolvido em Windows, mas o deploy era feito em Linux. Por causa de um deslize em selecionar corretamente a codificação de alguns arquivos do código fonte java, o sistema dava falhas aleatórias e nenhum log ajudava a tentar achar o que estava dando de errado.
O problema foi tanto, que até conseguirmos descobrir a causa dos erros, já estávamos literalmente, com a rede globo local (TV Anhaguera), fazendo reportagem sobre a demora nas posses dos mais de 5000 novos servidores públicos porque o sistema ficava fora do ar constantemente. (o governo tinha mais contratados (cabide de emprego), do que servidores efetivos, o MPE obrigou o estado a demitir todos os contratados e fazer um novo concurso).
Foi uma época tensa, triste e de muita hora besta (servidor publico não ganha hora-extra).
@cuducos somente no nome dos estados
@ronniery Se é só no nome dos estados o problema foi na migração que lê o JSON (talvez pelo padrão do Windows não ser UTF-8, como o @luzfcb disse, o erro pode ter acontecido na leitura do JSON).
Vou tentar forçar a migração para usar UTF-8, não sei se funciona. Mas para você não ter que voltar todas a migrações, tens duas opções:
Vou tentar forçar a migração para usar UTF-8 […]
Feito no c75ea3b. Se testar me avise se funcionou, @ronniery.
Valeu a ajuda galera, mas ainda sim exceção de charmap, já estou baixando um linux esperto aqui!
@ronniery, pode me descrever os passos que segui para ainda ter os erros de encoding? Você zerou o banco e rodou todas as migrações do zero?
Quando você diz zerar o banco... Refere-se ao postgree?
PublicAPI-master
da minha área de trabalhoREADME.md
runserver
Qual bando de dados está usando? Se for Postgres (ou MySQL) os dados do banco ficaram intactos. Se for SQLite, foram zerados. No teu passo 3 você configura alguma coisa como DATABASE_URL
? Se não configurou, o banco é SQLite e foi zerado, pois os dados ficam num arquivo dentro da pasta do projeto.
Vou pedir ajuda pra mais umas pessoas ver se tem como resolver esse problema das migrações no Windows.
Haha nem me atentei a DATABASE_URL
então sim, acabei utilizando SQLite sem saber
Tudo ia bem até executar o seguinte comando
root@virtual-VirtualBox:/home/virtual/Área de Trabalho/PublicAPI-master# python manage.py migrate
Apareceu o erro
Traceback (most recent call last): File "manage.py", line 10, in
execute_from_command_line(sys.argv) File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 399, in execute_from_command_line utility.execute() File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 261, in fetch_command commands = get_commands() File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 107, in get_commands apps = settings.INSTALLED_APPS File "/usr/lib/python2.7/dist-packages/django/conf/init.py", line 54, in getattr self._setup(name) File "/usr/lib/python2.7/dist-packages/django/conf/init.py", line 49, in _setup self._wrapped = Settings(settings_module) File "/usr/lib/python2.7/dist-packages/django/conf/init.py", line 132, in init % (self.SETTINGS_MODULE, e) ImportError: Could not import settings 'InternetSemLimites.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named apps
@ronniery Você está usando Python 2.7, não Python 3.5.1 (que é o que o projeto requer)…
Sucesso! Servidor rodando dentro do linux na máquina virtual, cadastrando e tudo :+1: Vou apontar o app android para este servidor e fazer meus testes obrigado.
Hell yeah : )
On Wed, May 4, 2016 at 11:48 AM ronniery notifications@github.com wrote:
Sucesso! Servidor rodando dentro do linux na máquina virtual, cadastrando e tudo [image: :+1:] Vou apontar o app android para este servidor e fazer meus testes obrigado.
— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/InternetSemLimites/PublicAPI/issues/8#issuecomment-216888521
Até agora os testes estão fluindo mas tenho uma pergunta, rola uma response em json?
Para o endpoint /provider/<number>
Se não for possível, irei dar parse no HTML do referido endpoint.
Não é o [/api/provider/<provider id>/
)(http://internetsemlimites.herokuapp.com/api/provider/42/) que procuras? Implementei no c75ea3b mencionado há 2 dias aqui:
POST /new/
redireciona para /provider/<provider id>
POST /api/new/
redireciona para /api/provider/<provider id>
Obrigado pela paciência, de fato foi falta de atenção minha, estou tentando enviar o email de confirmação para o meu email.
De nada, mano. Estamos junto nessa!
/admin/
) e em um
dos passos anteriores você cria um superuser para ti (usuário e senha
para acessar o Django Admin).
On Fri, May 6, 2016 at 11:47 ronniery notifications@github.com wrote:Obrigado pela paciência, de fato foi falta de atenção minha, estou tentando enviar o email de confirmação para o meu email.
- Localmente este email será enviado?
- Como eu confirmo (por parte da administração) a criação de uma nova operadora? Existe alguma área administrativa? Ou e pelo email que ainda não recebo?
— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/InternetSemLimites/PublicAPI/issues/8#issuecomment-217461168
@cuducos Não sei se precisa, mas mandei meu teste agora para o seu servidor e funcionou perfeitamente, se preciso for feche este issue
Obrigado testes finalizados =)
Recebi sim — com isso, fechado o tópico! Uhuu : ) Parabéns pela integração, @ronniery!
From @ronniery on April 30, 2016 12:32
Bom dia senhores, estou construindo um app android com a finalidade de disponibilizar as informações do web server, porém estou também disponibilizando a parte de registro de boas/péssimas operadoras.
Copied from original issue: InternetSemLimites/InternetSemLimites#52