Ambiente de Desenvolvimento x Produção

Olá pessoal,

Estou enfrentando um problema e gostaria de pedir a ajuda de vocês.

No meu ambiente de desenvolvimento (Windows), a aplicação está funcionando perfeitamente. Porém, ao publicar no servidor do UOL (Linux - cPanel), o comportamento não é o mesmo.

Vou explicar o cenário:

Por gosto pessoal em trabalhar com desafios, implementei um código no campo “código” da tabela de orçamento que busca a descrição do material em outra tabela. Essa descrição é exibida ao inserir um novo registro em um campo do tipo texto com auto-complete.

Além disso, há um comportamento específico na aplicação:

  • Ao navegar entre os registros, exibo somente a descrição do material;
  • Porém, ao inserir um novo registro, apresento a descrição, a unidade e o fabricante.

Até esse ponto, tudo funciona perfeitamente no ambiente de desenvolvimento.

Gostaria de destacar que, mesmo utilizando condições no lookup, no ambiente de desenvolvimento tudo roda sem nenhum problema.

Para facilitar a análise, vou anexar:

  • Telas demonstrando o funcionamento na minha máquina (ambiente local);
  • O código utilizado no lookup;
  • O código implementado no evento onLoad da aplicação.

Lookup de edição:
SELECT
p.PRO_CODIGO,
IF(’[v_modo_novo]’ = ‘1’,
CONCAT(
RPAD(LEFT(IFNULL(p.PRO_DESCRICAO, ’ '), 80), 80, ’ '),
RPAD(IFNULL(p.UNI_CODIGO, ’ '), 10, ’ '),
IFNULL(f.FAB_NOME, ‘’)
),
p.PRO_DESCRICAO
)
FROM
produto p
LEFT JOIN
fabric f ON p.FAB_CODIGO = f.FAB_CODIGO
ORDER BY
p.PRO_DESCRICAO

Código no Onload:

?>
<style>
/* --- ESTRUTURA GERAL --- */
input, select, textarea { width: 100% !important; box-sizing: border-box; }

/* Mantém o campo de texto do form com tamanho e fonte padrão do seu tema */
input.ui-autocomplete-input, #id_sc_field_pro_codigo {
    font-family: inherit !important;
    font-size: inherit !important;
    height: auto !important;
}

/* --- ESTILO DA LISTA (DROPDOWN) --- */
.ui-menu-item-wrapper, .select2-results__option {
    font-family: 'Courier New', Courier, monospace !important; 
    font-size: 13px !important;
    white-space: pre !important; 
    display: block !important;
    position: relative !important;
    line-height: normal !important;
    padding-right: 20px !important;
}

/* --- AS LINHAS VERTICAIS (SUAS CONFIGURAÇÕES DE 80 CHARS) --- */
.ui-menu-item-wrapper::before, .select2-results__option::before {
    content: "" !important; position: absolute !important; 
    left: 600px; 
    top: 0; bottom: 0; width: 1px !important; background-color: #ccc !important;
}

.ui-menu-item-wrapper::after, .select2-results__option::after {
    content: "" !important; position: absolute !important; 
    left: 670px; 
    top: 0; bottom: 0; width: 1px !important; background-color: #ccc !important;
}

/* Seus labels originais */
#hidden_field_label_unidade, #hidden_field_label_preco_venda, #hidden_field_label_preco_custo {
    text-align: right !important; width: 0% !important; white-space: nowrap !important;
}
</style>

<script>
$(document).ready(function() {
    // Função que limpa tudo que passar de 80 caracteres (Unidade e Fabricante)
    function forcarLimpeza(v) { 
        if(!v) return ""; 
        return v.substring(0, 80).trim(); 
    }

    // 1. Limpa quando você clica ou navega no dropdown
    $(document).on('autocompletefocus autocompleteselect', '.ui-autocomplete-input', function(event, ui) {
        if (ui.item && ui.item.label) {
            $(this).val(forcarLimpeza(ui.item.label));
            event.preventDefault(); 
        }
    });

    // 2. Limpa na navegação (previne o "vazamento" da unidade no campo)
    setInterval(function() {
        $(".ui-autocomplete-input").each(function() {
            var atual = $(this).val();
            if (atual.length > 80) { 
                $(this).val(forcarLimpeza(atual)); 
            }
        });
    }, 100);
});
</script>

<?php
// Lógica de botão novo / navegação
if (sc_btn_new) { 
    [v_modo_novo] = '1'; 
} else { 
    [v_modo_novo] = '0'; 
}
sc_set_global([v_modo_novo]);

// Linha de segurança para o banco (opcional)
sc_exec_sql("SET @modo = " . [v_modo_novo]);

Se alguém já passou por algo semelhante ou puder me orientar sobre o que pode estar causando essa diferença de comportamento entre os ambientes, ficarei muito grato.

Agradeço desde já pela atenção e ajuda!

Atenciosamente.

Fala meu amigo,

O que você pode fazer é verificar como está o seu arquivo de diagnosis no seu projeto no LINUX.

O que pude ver rapidamente são as tags PHP, tenta dar uma olhada no seu PHP.INI em uma variável chamada short_open_tag, deixa ela com o valo ‘on’, pode te ajudar.

Porem se conseguir verificar o diagnosis.php e verificar o erro que é retornado no log do PHP, ja pode te dar uma pista do que pode ser ou ate verificar o console do teu navegador o erro que é retornado.

Fala meu amigo João Pedro,

Já verifiquei tudo isso que você comentou, conferi o diagnosis.php, revisei o php.ini (inclusive o short_open_tag) e também olhei os logs de erro do PHP e o console do navegador. Está tudo normal, não está retornando nenhum erro de PHP.

O mais curioso é o seguinte: quando eu coloco a SQL no campo CODIGO, no Lookup de edição (para trazer descrição, unidade e fabricante), funciona perfeitamente tanto no desenvolvimento (Windows) quanto na produção (Linux - UOL Host).

Porém, quando adiciono a condição, aí muda o cenário: no desenvolvimento continua funcionando normalmente, mas na produção simplesmente não abre nem o dropdown para selecionar o material.

Então aparentemente não é erro de PHP, parece mais alguma diferença de comportamento entre os ambientes (talvez banco, encoding ou até algo no próprio Scriptcase).

Se tiver alguma ideia do que pode causar isso só em produção, agradeço!

inspecionou console javascript em produção?