Open edsontmarques opened 1 year ago
Aproveitando a observação do Edson, gostaria também de relatar que utilizando o lazarus 3.99 trunk , um simples ping/pong apresenta a seguinte mensagem abaixo :
(mesmo com a Veryfi method calls (-CR) desabilitado)
SOs: Manjaro e Pop! OS
This binary has no thread support compiled in. Recompile the application with a thread-driver in the program uses clause before other units using thread. Runtime error 232 at $000000000041B2C3 $000000000041B2C3 $000000000046A8DE LISTEN, line 142 of ../horse/src/Horse.Provider.FPC.HTTPApplication.pas
@edsontmarques @Valmadson acharam alguma solução para o problema? Não tivemos mais relatos quanto a esse tipo de situação...
Vinícius, Infelizmente estive envolvido com vários problemas fora da área de programação e precisei deixar o desenvolvimento da API no ponto que estava. Não tive como voltar a verificar se o problema continua acontecendo ou se mudou com as novas versões do Lazarus e FPC.
Edson, vc está rodando em Linux, não é? Verifique como está declarada a unit CThreads na Unit principal do seu projeto. Veja se está como abaixo e ela tem que vir antes da declaração da Unit do horse: tente adicionar essa unit antes do horse:
{$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Horse;
Além do -CR
Então... O meu dpr está assim:
program project1;
{$MODE DELPHI}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Horse;
procedure GetPing(Req: THorseRequest; Res: THorseResponse);
begin
Res.Send('Pong');
end;
begin
THorse.Get('/ping', GetPing);
THorse.Listen(9000);
end.
E como expliquei antes, quando a gente ajusta a configuração do Lazarus para ele criar automaticamente os "build mode", o -CR é já vem setado para o mode debug.
Aproveito para responder ao Vinicius ... Acabei de refazer o mesmo teste do início deste post (tomando o cuidado de atualizar o meu repositório do horse com o da hashload) e o caso relatado continua acontecendo.
" Project project1 raiser exception class 'EInvalidCast'. In file 'Horse.Core.RouterTree.NextCaller.pas'at line 89: else if (FPath.Count = 0) and Assigned(FCallBack) then "
Confirmo também que basta entrar nas configurações do projeto e remover o -CR que a issue não ocorre.
Infelizmente não estou com condições de aprofundar a pesquisa por uma solução no momento.
Criei um projeto simples de teste com o código de exemplo que encontra-se em https://github.com/HashLoad/horse. Configurei o Project Options definindo os Build Modes padrões criados pelo Lazarus (Project Options > Compiler Options > Botão '...' no topo do form). Com isso o Lazarus cria os Build Modes "Release" e "Debug". Ajustei o Build Mode para Debug e Rodei a API básica com o Lazarus. Entrei no Firefox e enviei a requisição "localhost:9000/ping".
O Lazarus levantou uma exceção de "Invalid Typecast" na unit Horse.Core.RouterTree.NextCaller linha 89. Deixei continuar a execução e o firefox me mostrou o seguinte retorno:
`The application encountered the following error:
Fazendo alguns testes na configuração do Build Mode Debug gerado pelo Lazarus, percebi que se Desligarmos o parâmetro Project Options > Compiler Options > Debugging > Checks and assertion > Verify method calls (-CR) , o erro acima não acontece e o retorno para requisição é "Pong", como esperado.