Jump to content

Reflection Exception cuando Traduzco Temas o Módulos


tengoqprobarlo

Recommended Posts

Buenas, con PrestaShop 1.7.8.5, cuando voy a Internacional>Traducciones, y me dispongo a traducir cualquier Tema o Módulo, siempre que le doy a Guardar, se queda la pantalla en Blanco y no puedo entrar al Backoffice (el Front sí que funciona), y me toca reinstalar todos los archivos del directorio httpdocs porque realmente no sé lo que ocurre.

Tengo un Servidor VPS Cloud Linux con Ubuntu 20.04 en Ionos y Plesk instalado. Utilizo Apache, Nginx y PHP versión 7.4.29

He estado mirando en foros y coinciden en 2 cosas:

  • Toca restaurar backup o reinstalar el sistema entero (lo que me pasó la primera vez).
  • Al dar en Guardar, se introducen varios archivos index.php en blanco en varios sitios (no he podido ver dónde), y por eso no encuentra las clases PHP.

Al principio pensé que sería un problema de mi tema, pero no, porque me pasa también con el tema predeterminado, y con cualquier módulo, tanto los que vienen de serie como los que instale yo.

Estos son los pasos concretos para reproducir el error y repararlo (adjunto imágenes):

  1. Entrar en Backoffice>Internacional>Traducciones:
    [url=https://ibb.co/tZS4Jc7][img]https://i.ibb.co/f8b2xth/01.jpg[/img][/url]
     
  2. Selecciono un Módulo, Español, Accedo, Traduzco algunas Frases y doy Guardar:
    [url=https://ibb.co/hFchJLk][img]https://i.ibb.co/m501Vbm/02.jpg[/img][/url]
     
  3. Al momento se queda el Backoffice en blanco y no hay forma de acceder a ninguna parte, salvo al Front que sí que funciona:
    [url=https://ibb.co/t3TdZwy][img]https://i.ibb.co/wYFvJZD/03.jpg[/img][/url]
     
  4. Me conecto por terminal a mi servidor y accedo a la ruta /var/www/vhosts/misitio/httpdocs/config. Edito el archivo defines.inc.php:
    [url=https://ibb.co/SrLWjmq][img]https://i.ibb.co/2Nbm9MX/04.jpg[/img][/url]
     
  5. Modifico la opción para mostrar los errores de Depuración: PS_MODE_DEV lo pongo en true.
    [url=https://ibb.co/c3Zw8sy][img]https://i.ibb.co/3djvFPT/05.jpg[/img][/url]
     
  6. Me conecto de nuevo al Backoffice y ahora veo la Excepción que da. Siempre es la misma y siempre se refiere a los mismos archivos, directorios, clases, líneas, etc.:
    ReflectionException
    The autoloader expected class "PrestaShopBundle\Controller\Admin\Sell\index" to be defined in file "/var/www/vhosts/misitio/httpdocs/vendor/composer/../../src/PrestaShopBundle/Controller/Admin/Sell/index.php". The file was found but the class was not in it, the class name or namespace probably has a typo.

    [url=https://ibb.co/DQF3xYB][img]https://i.ibb.co/jDY7czC/06.jpg[/img][/url]
     
  7. Para resolverlo: toca reinstalar todo el sistema incluido la base de datos, o bien, restaurar un backup de todos los archivos y directorios de la ruta /httpdocs. Con lo cual, selecciono todo, lo borro:
    [url=https://ibb.co/FYFHh3T][img]https://i.ibb.co/KsJK5hv/07.jpg[/img][/url]
     
  8. Y restauro un backup que tengo de los archivos (la base de datos no es neceario, he comprobado que no hace falta restaurarla, con los archivos suele valer):
    [url=https://ibb.co/tYHwW9y][img]https://i.ibb.co/VML0PsX/08.jpg[/img][/url]
     
  9. Ya está todo restaurado:
    [url=https://ibb.co/8bNxfKC][img]https://i.ibb.co/ZSGgFLj/09.jpg[/img][/url]
     
  10. Y ya accedo al Backoffice con normalidad (hasta que vuelva a intentar traducir algo, y se repite el problema de nuevo):
    [url=https://ibb.co/xYdh0BC][img]https://i.ibb.co/LrHSWck/10.jpg[/img][/url]
     
  11. Por lo tanto, me toca traducir todos los archivos TPL del Tema y del Módulo a mano, con Visual Studio Code, procurando no comerme ninguna comilla simple, y subiendo los archivos manualmente a /httpdocs/modules
    [url=https://ibb.co/hB8hpvx][img]https://i.ibb.co/6HsV65c/11.jpg[/img][/url]

 

Desesperadito estoy... y sólo encuentro foros donde se dice que hay que reinstalar todo... ¿A nadie le pasa con esta versión de Prestashop? ¿Estoy condenado a traducir 500 archivos TPL a mano, y cada vez que se actualice un módulo, volver a empezar?

En fin, agradezco cualquier comentario.

Un saludo.

 

 

 

 

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

11.jpg

Link to comment
Share on other sites

Buenas, no quiero una tienda multilenguaje, la quiero en Español, pero si los módulos o el propio tema están en inglés, necesito que esté todo en español. No voy a tener por ejemplo un botón de "Regístrate" y luego "Name, Surname, Address, City...". No, tendrá que estar todo en español, digo yo, y por eso necesito traducir lo que está en inglés.

¿Alguna idea de por qué casca cuando lo intento desde el Backoffice?

Un saludo.

Link to comment
Share on other sites

Cada vez que hago una traducción desde el BO de Prestashop, pierdo el acceso al BO y tengo que restaurar un backup para poder entrar de nuevo.

Haciendo cualquier otra clase de configuración dentro del BO, no pierdo el acceso. Únicamente es cuando traduzco temas o módulos, que pierdo el acceso y aparece la ReflectionException.

Gracias.

Link to comment
Share on other sites

Tengo una serie de preguntas para ti:

  1. La tienda la instalaste nuevo, o es un update de otra version?
  2. Tienes todas las requisitos cuplidos?
  3. en tu servidor tienes derecho de ajustar php y sus modules?

 

Link to comment
Share on other sites

Hola, te describo el servidor:

  • Ionos VPS Cloud M: 2 GB RAM, 2vCores, 80 GB SSD
    • Plesk Obsidian 18.0.43
    • Ubuntu 20.04.4 LTS
    • PHP 7.4.29
    • Base de Datos MariaDB 10.3.34
    • Apache
       
  • Prestashop:
    • Prestashop 1.7.8.5
    • Instalado NUEVO como Aplicación directamente desde Plesk.

El servidor es totalmente administrado por mí, puedo acceder por SSH y puedo configurar los parámetros de PHP, de Plesk, de Ubuntu, etc.

Esta es la Configuración de PHP que tengo aplicada: /var/www/vhosts/system/tengoqueprobarlo.com/etc/php.ini

Aquí he cambiado estos parámetros para que no se me quede sin memoria y que no se supere el tiempo de espera del servidor, cuando importo unos cuantos miles de productos:

memory_limit = 1024M
max_execution_time = 3000
max_input_time = "-1"
post_max_size = 20M
upload_max_filesize = 1024M

; ATTENTION!
; 
; DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
; SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

[PHP]
SMTP = localhost
allow_url_fopen = On
allow_url_include = Off
auto_append_file = 
auto_globals_jit = On
auto_prepend_file = 
bcmath.scale = 0
cli_server.color = On
default_charset = "UTF-8"
default_mimetype = "text/html"
default_socket_timeout = 60
disable_classes = 
disable_functions = "opcache_get_status"
display_errors = Off
display_startup_errors = Off
doc_root = 
enable_dl = Off
engine = On
error_reporting = 22519
expose_php = On
file_uploads = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
implicit_flush = Off
ldap.max_links = -1
log_errors = On
log_errors_max_len = 1024
mail.add_x_header = Off
max_execution_time = 3000
max_file_uploads = 20
max_input_time = "-1"
max_input_vars = 10000
memory_limit = 1024M
mysqli.allow_persistent = On
mysqli.default_host = 
mysqli.default_port = 3306
mysqli.default_pw = 
mysqli.default_socket = 
mysqli.default_user = 
mysqli.max_links = -1
mysqli.max_persistent = -1
mysqli.reconnect = Off
mysqlnd.collect_memory_statistics = Off
mysqlnd.collect_statistics = On
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.defaultbinmode = 1
odbc.defaultlrl = 4096
odbc.max_links = -1
odbc.max_persistent = -1
open_basedir = "/var/www/vhosts/tengoqueprobarlo.com/:/tmp/"
output_buffering = 4096
pdo_mysql.default_socket = 
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.ignore_notice = 0
pgsql.log_notice = 0
pgsql.max_links = -1
pgsql.max_persistent = -1
post_max_size = 20M
precision = 14
register_argc_argv = Off
register_globals = disabled
report_memleaks = On
request_order = "GP"
serialize_precision = -1
session.auto_start = 0
session.cache_expire = 180
session.cache_limiter = nocache
session.cookie_domain = 
session.cookie_httponly = 
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_samesite = 
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.gc_probability = 0
session.name = PHPSESSID
session.referer_check = 
session.save_handler = files
session.save_path = "/var/lib/php/sessions"
session.serialize_handler = php
session.sid_bits_per_character = 5
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.use_cookies = 1
session.use_only_cookies = 1
session.use_strict_mode = 0
session.use_trans_sid = 0
short_open_tag = Off
smtp_port = 25
soap.wsdl_cache_dir = "/tmp"
soap.wsdl_cache_enabled = 1
soap.wsdl_cache_limit = 5
soap.wsdl_cache_ttl = 86400
tidy.clean_output = Off
unserialize_callback_func = 
upload_max_filesize = 1024M
user_dir = 
variables_order = "GPCS"
zend.assertions = -1
zend.enable_gc = On
zend.exception_ignore_args = On
zlib.output_compression = Off

Y esta la Configuración de Nginx: /etc/nginx/nginx.conf

Aquí añadí estos parámetros porque me salía un error: 502 Bad Gateway Upstream sent too big header

    proxy_buffers 8 16k;
    proxy_buffer_size 32k;
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;


#user  nginx;
worker_processes  1;

#error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

#pid        /var/run/nginx.pid;

include /etc/nginx/modules.conf.d/*.conf;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #tcp_nodelay        on;

    #gzip  on;
    #gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    server_tokens off;

    include /etc/nginx/conf.d/*.conf;

    proxy_buffers 8 16k;
    proxy_buffer_size 32k;
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
}

# override global parameters e.g. worker_rlimit_nofile
include /etc/nginx/*global_params;

Muchas gracias por tu ayuda.

 

Edited by tengoqprobarlo (see edit history)
Link to comment
Share on other sites

1 hour ago, tengoqprobarlo said:
max_file_uploads = 20

Ponle 200

 

1 hour ago, tengoqprobarlo said:
memory_limit = 1024M

Es muy poca RAM para una tienda. Es poca ram para una simple app con un control panel.

Cada cambio debes restart apache2

Link to comment
Share on other sites

OK, están hechos los cambios, pero nada, el problema sigue.

Me he dado cuenta que también me salió la Reflection Exception (con los mismos parámetros) cuando activé el Modo de Depuración desde Parámetros Avanzados > Rendimiento, obligándome a restaurar el backup de los archivos y la base de datos una vez más.

Por lo menos ya sé que no sale únicamente cuando trato de traducir algo desde el Backoffice, también aparece el error en otras ocasiones, pero no sé por qué ni qué relación hay.

Además, he observado otro error, probando el formulario de contacto, que por alguna razón da error al intentar mandar el mensaje, activé el modo de depuración directamente desde el archivo defines_inc.php, y esta vez recibí una excepción relacionada con el Contexto, te lo adjunto.

En fin, seguiré investigando pero vamos, debe haber algo por ahí que produce estas excepciones, pero a saber lo que es...

Gracias.

ContextError Exception en Formulario Contacto (Debug activado).pdf

Link to comment
Share on other sites

ok, no he visto mucho o mejor no he leido demaciado sobre tu problema..
 

En 4/29/2022 a las 1:31 PM, tengoqprobarlo dijo:

Tengo un Servidor VPS Cloud Linux con Ubuntu 20.04 en Ionos y Plesk instalado. Utilizo Apache, Nginx y PHP versión 7.4.29


-Te recomiendo bajes a php 7.3  Aplicacion FPM servidor por Apache

ahora veo que tiene el usuario creado
ya verificaste si php si lo esta ejecutanco correctamente con el usuario

tu usuario, (dueños de los archivos y sus permisos) Archivos y Folders 644,755

Los archivos(usuario debe de coincidir con el usuario que ejecutara procesos php)

dale una leida a dependiendo de tu php o distribucion

/etc/php/7.3/fpm/pool.d/

listen.owner = 
listen.group = 

listen.acl_users = 
listen.acl_groups = 

Por ultimo usa este archivo y subelo a tu servidor para corroborar que todo este correcto y no tendrias que tener ningun problema

https://devdocs.prestashop.com/1.7/basics/installation/system-requirements/
https://github.com/PrestaShop/php-ps-info/

https://devdocs.prestashop.com/1.7/basics/installation/httpd/

con Gusto si ocupas ayuda con Servidores 😀

Link to comment
Share on other sites

Hola, mi servidor no me permite bajar a 7.3. Utilizo 7.4.29

Probé con 8 pero daba mil fallos, así que volví a 7.4.29...

Bueno, he restaurado el servidor por completo, reinstalando el sistema operativo Ubuntu, reinstalando Plesk, etc. etc. Y me ha pasado una cosa curiosa:

Tengo dos backups:

Restauré el Backup Automático del módulo NT Backup And Restore, y el Front funconaba, pero el Back no. Activé el Debug y me volvió a salir la Reflection Exception.

Así que antes de tener que reinstalar desde cero todo el sistema de nuevo, borré el directorio httpdocs y la Base de Datos, y restauré el Backup Manual: Descomprimí el ZIP en httpdocs e Importé la Base de Datos manualmente de la copia que había hecho yo mismo. Pues funciona todo perfectamente, excepto la traducción de módulos (igual que el primer mensaje con el que abrí este hilo).

Es decir, restaurar desde el Módulo NT Backup And Restore produce la misma excepción: Reflection Exception al entrar en el Backoffice.

Pero restaurar un backup manual, casi todo funciona bien (las traducciones no).

Si eso os da alguna pista.... Me imagino que los permisos en los Archivos y Directorios puedan ocasionar el problema con la restauración desde el módulo NT Backup and Restore.

Así que he puesto los Permisos de Directorios a 755 y los Archivos a 644, como me decías.

  • Directorios 755:
    • Propietario: Lectura-Escritura-Ejecución
    • Grupo: Lectura-Ejecución
    • Otros (Público): Lectura-Ejecución
       
  • Archivos 644:
    • Propietario: Lectura-Escritura
    • Grupo: Lectura
    • Otros (Público): Lectura

No tengo esta ruta, ni nada similar: /etc/php/7.4/fpm/pool.d/

Tampoco encuentro la carpeta pool.d

Finalmente, la comprobación del servidor phppsinfo.php con estas credenciales, no funciona, me pide las credenciales constantemente y no accede:

    const DEFAULT_PASSWORD = 'prestashop';

    const DEFAULT_LOGIN = 'prestashop';

 

Actualizaré el hilo si descubro algo más.

Muchas gracias por la ayuda, un saludo.

Link to comment
Share on other sites

Comentas que tienes un servidor VPS, tienes que tener acceso root y te deberia de dejar hacer todo lo que quieras en tu servidor

dale una buena leida y considero que estan muy bien los requerimientos aqui puestos

https://devdocs.prestashop.com/1.7/basics/installation/system-requirements/

https://devdocs.prestashop.com/1.7/basics/installation/httpd/

https://devdocs.prestashop.com/1.7/basics/installation/configuration/

 

En 5/15/2022 a las 9:13 AM, tengoqprobarlo dijo:

Así que he puesto los Permisos de Directorios a 755 y los Archivos a 644, como me decías.

  • Directorios 755:
    • Propietario: Lectura-Escritura-Ejecución
    • Grupo: Lectura-Ejecución
    • Otros (Público): Lectura-Ejecución
       
  • Archivos 644:
    • Propietario: Lectura-Escritura
    • Grupo: Lectura
    • Otros (Público): Lectura

considero que sigue siendo el problema del usuario que esta ejecutando php, (si lo estas haceidno con fpm) que un usuario ejecuta php y otro es el dueño de los archivos

Si ocupas ayuda con servidor Linux, estoy a tus ordenes somos expertos en este tema

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...