Ir para conteúdo
  • Cadastre-se

Luis Paiva

Membros
  • Total de ítens

    2
  • Registro em

  • Última visita

Tudo que Luis Paiva postou

  1. Sim, eu cheguei a testar com ela e funcionou. Poŕem estou trabalhando em um projeto que o cliente é "detalhista" com impressões rsrs. E já entramos em comum acordo sobre a impressão da NFe. Na época estava desenvolvendo em ambiente Windows e ao migrar para Linux algumas opções de Layout de impressão e até mesma impressão em si da NFe não fica exatamente igual quando uso a biblioteca CONSOLE-MT. Por isso esse esforço em fazer funcionar com MT padrão sem ser CONSOLE-MT.
  2. Ei, galera do fórum ACBr! Quem aí já perdeu noites de sono brigando com crashes misteriosos no PHP-FPM ao tentar integrar a ACBrLib via FFI? Pois é, eu passei por isso e resolvi compartilhar essa jornada aqui no tópico, pra ajudar quem tá no mesmo barco. Vamos destrinchar o problema, as tentativas frustradas e a solução que salvou o dia: Laravel Octane com RoadRunner. Se você tem dicas extras ou variações, comenta ai! Resumo Rápido (Pra Quem Tem Pressa) O vilão? SIGSEGV ao carregar ACBrLib via FFI::cdef() no PHP-FPM, culpa da dependência gráfica libgdk-x11-2.0.so que não joga bem em times multi-processo. Tentativas como FPM solitário ou FrankenPHP deram dor de cabeça, mas o herói final é Laravel Octane com RoadRunner: workers isolados, PHP do sistema e zero recompilações. Funciona como mágica no CLI, melhora performance e acaba com os crashes. Ah, e queues são um plano B infalível pra offloadar o trabalho pesado! O Problema: O SIGSEGV, Esse Inimigo Invisível Sintomas Clássicos Boom! Seu worker FPM morre com um "exited on signal 11 (SIGSEGV)" nos logs – clássico de quem integra libs nativas. Frontend grita "502 Bad Gateway" ou "Connection reset by peer". No Laravel? Logs cheios de drama: "Erro crítico ao carregar a biblioteca ACBr!". Tudo isso rola no código inocente: $ffi = FFI::cdef(file_get_contents($importsPath), $dllPath); // Aqui o bicho pega, galera! Ambiente do Crime PHP 8.3+ no FPM. Laravel 12, FFI on fire. ACBrLib NFe (aquela .so marota). Linux (Ubuntu/Debian) com Interface Gráfica, porque no Windows com Laragon, era paz e amor graças ao php-cgi sem forks malucos. Alguém aí usa Windows e confirma? Causa Raiz: Culpa da GDK, Essa Dependência Gráfica Teimosa A estrela problemática é libgdk-x11-2.0.so (dependência do ACBrLib via GTK+). Verifique com: ldd libacbrnfe64.so | grep gdk # Spoiler: Ela aparece e causa o drama Por quê? GDK adora recursos X11 (display, eventos), mas em FPM multi-processo, é como convidar um elefante pra uma festa em apartamento: race conditions, violações de memória e... SIGSEGV! Libs MT como ACBr não curtem forks mas threads sim, processos clones nem tanto. No fórum, já vi posts parecidos e recomendações ao uso do CONSOLE-MT; alguém tem um workaround pra GDK sem Xvfb? Tentativas Frustradas 1. FPM Solitário: "Só Eu e Meu Processo" Ideia: Configurar pm.max_children=1 Resultado: Ainda crasha, e o server vira lesma. Lição: Não adianta maquiar o problema. Alguém testou isso com ACBr? 2. FrankenPHP: O "Monstro" Promissor Top em performance (até 4x mais rápido que FPM!), mas precisa recompilar PHP com FFI embed -> um pesadelo. Abandonado porque, né? Vida curta pra isso. (Dica: Em 2025, ele brilha em setups simples, mas não substitui Nginx/Apache em tudo. Solução Vencedora: Laravel Octane + RoadRunner – O Duo Dinâmico pra ACBr! Por quê? RoadRunner usa PHP CLI isolado (sem forks malucos), mantém workers persistentes e adora FFI. Benchmarks de 2025 confirmam: throughput insano! Escalável e evita overhead, perfeito pro nosso mundo fiscal. Passos Rápidos (Atualizados com Dicas de 2025) Verifique FFI no CLI: php -m | grep ffi. Se não, ative em /etc/php/8.3/cli/conf.d/20-ffi.ini. Instalar RoadRunner # Baixar RoadRunner wget https://github.com/roadrunner-server/roadrunner/releases/latest/download/rr_linux_amd64.deb # Instalar sudo dpkg -i rr_linux_amd64.deb sudo apt-get install -f -y # Verificar instalação rr --version Instalar Laravel Octane cd /var/www/seu-projeto # Instalar Octane composer require laravel/octane # Publicar configuração php artisan octane:install Quando perguntado, escolha: RoadRunner Configurar RoadRunner Crie/edite o arquivo .rr.yaml na raiz do projeto: version: "3" rpc: listen: tcp://127.0.0.1:6001 server: command: "php" user: "" group: "" env: - APP_RUNTIME: RoadRunner http: address: 0.0.0.0:80 middleware: ["gzip"] pool: num_workers: 4 max_jobs: 0 allocate_timeout: 60s destroy_timeout: 60s logs: level: error output: stdout err_output: stderr Configurar Octane Edite config/octane.php: 'server' => env('OCTANE_SERVER', 'roadrunner'), 'max_execution_time' => 30, Criar Serviço Systemd Crie o arquivo /etc/systemd/system/octane.service: [Unit] Description=Laravel Octane RoadRunner Server After=network.target postgresql.service [Service] Type=simple User=root WorkingDirectory=/var/www/seu-projeto Environment="PHP_INI_SCAN_DIR=/etc/php/8.3/cli/conf.d" Environment="FFI_ENABLE=1" Environment="DISPLAY=:99" ExecStart=/usr/bin/php -d ffi.enable=1 /var/www/seu-projeto/artisan octane:start --server=roadrunner --host=0.0.0.0 --port=80 --rpc-host=127.0.0.1 --rpc-port=6001 Restart=always RestartSec=3 [Install] WantedBy=multi-user.target Importante: Ajuste WorkingDirectory para o caminho do seu projeto Ajuste a porta se necessário (80 requer root, ou use 8000 e configure proxy reverso) -d ffi.enable=1 garante que FFI está habilitado Habilitar e Iniciar Serviço # Recarregar systemd sudo systemctl daemon-reload # Habilitar serviço (inicia no boot) sudo systemctl enable octane.service # Iniciar serviço sudo systemctl start octane.service # Verificar status sudo systemctl status octane.service # Ver logs sudo journalctl -u octane.service -f Xvfb ainda é amigo: apt install xvfb && Xvfb :99 &. Permissões? chown www-data pra evitar birras. Comparação: FPM vs. RoadRunner Aspecto PHP-FPM RoadRunner FFI/ACBr Explode em SIGSEGV Roda suave como manteiga Perf. Boa, mas lenta em picos Estelar – workers eternos! Manut. Fácil, mas crash-prone Média, mas vale o ouro Humor "Crash? De novo?!" "Pronto pro próximo request!" Troubleshooting Rápido Serviço não liga? journalctl -u octane -f – logs salvam vidas. Workers morrendo? Cheque memória (free -h) ou leaks no código. Porta ocupada? lsof -i :80 e mude pra 8000 com proxy. Se RoadRunner der PT, queues são backups ótimos, simples e crash-free! Referências Atualizadas (2025 Edition) Laravel Octane Docs. RoadRunner.
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...