horse
horse copied to clipboard
Erro de execução com Lazarus 3.0, FPC 3.2.2, Ubuntu 23.10 e Horse Trunk
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:
Error: Invalid type cast
Stack trace:
$00000000005DE23D Next, line 89 of ../../../../../frameworks/fpc/horse/src/Horse.Core.RouterTree.NextCaller.pas
$00000000004E566F ExecuteInternal, line 187 of ../../../../../frameworks/fpc/horse/src/Horse.Core.RouterTree.pas
$00000000004E5401 Execute, line 149 of ../../../../../frameworks/fpc/horse/src/Horse.Core.RouterTree.pas
$00000000005E050A HandlerAction, line 94 of ../../../../../frameworks/fpc/horse/src/Horse.WebModule.pas
$00000000005E03CB DoOnRequest, line 79 of ../../../../../frameworks/fpc/horse/src/Horse.WebModule.pas
$00000000005E13A4`
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.
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)
-
- (Já no windows versão 2.2.6 stable do lazarus funciona normal)
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.