¿Cómo puedo depurar mi tienda Magento?
Esta es una pregunta que no es demasiado relevante para nosotros ahora, pero si existiera un sitio Magento SE hace 5 años, probablemente habría sido nuestra primera pregunta. Para aquellos que acaban de ingresar a Magento, o que no están familiarizados con él, conocer los fundamentos de la depuración puede ser clave para descartar la causa de los problemas. Y a pesar de su irrelevancia para nosotros ahora, nos estamos adelantando a esta pregunta que aparece con un enfoque de respuesta propia.
¡Ayuda mi sitio está caído!
- ¿Mi diseño tiene la culpa?
- ¿Es culpable un módulo de terceros?
- ¿Por qué no puedo ver el error?
Cada una de estas preguntas se puede responder fácilmente siguiendo un enfoque estandarizado para la depuración que incluso los usuarios más básicos pueden completar. Mediante un proceso de eliminación de los fundamentos de la depuración de una tienda Magento.
fuente
Respuestas:
La depuración es un poco un arte, pero algo que se puede dominar fácilmente siguiendo un régimen simple.
Sigue cada punto hasta que finalmente llegues a una solución.
Habilitar errores PHP
Esto es clave para la mayoría de los problemas. Por razones de seguridad u otras, la configuración de PHP podría deshabilitar por defecto la visualización de errores de PHP.
Puede habilitar errores con una solución más permanente, o simplemente algo más temporal.
Solución permanente
Para usuarios de Apache / mod_php
En el
.htaccess
archivo raíz de su documento , simplemente colóquelo en la parte superior.Para usuarios de Nginx / FastCGI
En su configuración de virtualhost de Nginx, en la
location .php {
directiva final o en elfastcgi_params
archivo (si tiene uno especificado)Solución temporal / universal
Para cualquier plataforma
Edite el bootstrap de Magento
index.php
en la raíz de su documento y descomente la siguiente línea:Habilitar modo desarrollador
Cuando ha tenido un error y de repente ha llegado a la página "Informe de errores", y se le ha dado una cadena de error aparentemente inútil como
1184257287824
: tiene algunas opciones.Solución permanente
Para usuarios de Apache / mod_php
En el
.htaccess
archivo raíz del documento , simplemente colóquelo en la parte superior.Para usuarios de Nginx / fastcgi
En su configuración de virtualhost de Nginx, en la
location .php {
directiva final o en elfastcgi_params
archivo (si tiene uno especificado)Solución temporal / universal
Edite la rutina de arranque de Magento
index.php
en la raíz de su documento y haga que laif
declaración sea siempre verdadera o habilitada para su IP específica.o
Comprueba tus permisos
Los permisos incorrectos causarán una gran cantidad de problemas, muchos de los cuales no son tan fáciles de encontrar a primera vista.
De lo contrario, puede parecer que el sitio funciona de manera normal, sin errores críticos realmente visibles.
Tenga en cuenta que esta práctica es segura para el alojamiento dedicado, pero puede presentar problemas de seguridad con el alojamiento compartido si el proceso de Apache no se cambia por usuario.
En nuestro ejemplo, el usuario SSH / FTP es
sonassi
, el usuario Apache esapache
y el grupo esapache
Agregue el usuario FTP / SSH al grupo Apache
Lo que es más importante, debemos asegurarnos de que el usuario FTP / SSH sea parte del grupo Apache, en nuestro ejemplo, es
apache
(pero también es comúnmentewww-data
)Siga agregando tantos usuarios al grupo como tenga para FTP / SSH.
Restablecer permisos originales
Entonces, antes de comenzar, asegurémonos de que todos los permisos sean correctos.
Hacer los cambios permanentes
ACL y bits adhesivos
Las ACL en Linux nos permiten definir reglas específicas, en nuestro caso, qué archivos de permisos deben heredar en la creación. Una parte adhesiva (mencionada más adelante) se encarga de la herencia grupal, pero no ayuda con los permisos, razón por la cual usamos ACL.
Comience por habilitar el soporte de ACL en la partición activa, asegúrese de que su núcleo se compiló con soporte de ACL .
La partición puede ser
/
,/home
,/var
o alguna otra cosa, reemplace según sea apropiado.Ahora que las ACL están habilitadas, podemos establecer las reglas de ACL y agrupar bits fijos:
Pero no tengo soporte para ACL
Si su Kernel no admite ACL, también puede usar
umask
(que es una configuración de tiempo de ejecución para BASH, FTP y PHP) para establecer los permisos de archivo predeterminados. Magento por lo general estableceumask(0)
enindex.php
, sin embargo, sería en su interés de cambiar esta situación.En tu
index.php
cambio, laumask
línea seráY en su entorno BASH para SSH, configúrelo en su
.bashrc
o.bash_profile
Para su servidor FTP, necesitará leer la documentación, pero el principio es el mismo.
Revertir tema a predeterminado
Es posible que su tema o paquete sea responsable de este problema. Volver a un tema Magento de vainilla es una forma rápida de averiguarlo.
** Esto viene con la advertencia de que algunos módulos pueden depender de ciertas características del tema *
En lugar de cambiar cualquier cosa a través del panel de administración, es mucho más simple cambiar el nombre de los directorios ofensivos.
Vía SSH
O a través de su cliente FTP, atraviese y cambie el nombre de su paquete a otra cosa. p.ej.
myBrokenTheme.tmp
Si esto resuelve tu problema
Luego debe profundizar un poco más sobre qué parte de la plantilla es problemática. Así que restaure su paquete e intente lo siguiente, probando entre cada uno.
Esencialmente, el proceso consiste en habilitar gradualmente los directorios a medida que recorre el árbol de archivos, hasta que pueda encontrar el archivo ofensivo.
.tmp
.tmp
Luego, si se soluciona, cambie el nombre de todos los archivos dentro del directorio de diseño a
.tmp
- (para los usuarios de SSHls | xargs -I {} mv {} {}.tmp
orename 's/^/.tmp/' *
)Luego, habilite gradualmente cada archivo 1 por 1 hasta que se resuelva.
Si esto no resuelve tu problema
Existe el potencial de que sus
base/default
oenterprise/default
directorios se han contaminado - y lo mejor es reemplazado por una versión limpia conocida.Puede hacerlo descargando una compilación limpia de Magento y reemplazando sus directorios según sea necesario. A través de SSH puedes hacer esto:
También puede aprovechar la oportunidad para
diff
los dos directorios si desea verificar cualquier cambio.NÓTESE BIEN. Este método causará más errores durante el proceso, ya que la dependencia del módulo dicta la existencia de archivos específicos. Desafortunadamente, es normal para el curso.
Deshabilitar módulos locales
Por defecto, Magento define la ruta de inclusión de PHP para cargar clases en el siguiente orden
Una vez más, en lugar de deshabilitar los módulos a través del panel de administración de Magento, es más práctico hacerlo a nivel de archivo.
Por lo general, para deshabilitar un módulo de la forma "adecuada", editaría el
./app/etc/modules/MyModule.xml
archivo y el conjunto respectivos<active>false</active>
; sin embargo, esto no impide que se cargue una clase.Si otra clase extiende una clase dada en un módulo (ignorando cualquier declaración de dependencia de Magento), todavía se cargará, independientemente de si la extensión está deshabilitada o no.
De nuevo, el mejor medio para deshabilitar una extensión es cambiar el nombre del directorio.
Comience deshabilitando local
Simplemente cambie el nombre del directorio a través de FTP o use el siguiente comando SSH
Luego deshabilitar comunidad
Si el problema se resuelve desde cualquiera
Entonces es un caso de entender de qué módulo en particular se originó el error. Al igual que con el ejemplo dado anteriormente para el diagnóstico del paquete, se aplica el mismo proceso.
Así que restaure el directorio X e intente lo siguiente, probando entre cada uno.
Esencialmente, el proceso consiste en habilitar gradualmente directorios (módulos) uno por uno hasta que vuelva a ocurrir el error
.tmp
(para los usuarios SSHls | xargs -I {} mv {} {}.tmp
orename 's/^/.tmp/' *
).tmp
del nombre del archivoSi el problema no se resuelve
Entonces es posible que el núcleo esté contaminado. El núcleo principal de Magento PHP consiste en
De nuevo, cambie el nombre de estos directorios y copie en una variante limpia. Suponiendo que ya haya descargado una versión limpia de Magento como se indicó anteriormente, a través de SSH, puede hacer esto:
Luego, si el problema aún no se resuelve, reemplace el
lib
directorio tambiénEn este punto, su tienda Magento no será más que una instalación sencilla con una base de datos modificada.
En realidad, algunos modelos todavía se almacenan en la base de datos (por ejemplo, incremento de orden), por lo que en este punto, se convierte en un caso de hacer manualmente esas ediciones. Hasta ahora, todos los pasos anteriores han sido reversibles sin daños duraderos. Pero si también importáramos una base de datos limpia de Magento, podría resultar irreversible (salvo restaurar una copia de seguridad).
La guía anterior sirve para ayudarlo a identificar un error; no para arreglar el error resultante.
Contenido obtenido voluntariamente de www.sonassi.com/knowledge-base/magento-debug-process y www.sonassi.com/knowledge-base/stop-magento-permissions-errors-permanently
fuente
755
y644
permisos? ¿O tiene alguna razón especial para recomendar775
y664
?rwx
solo para el propietario, ya que el grupo y todos los demás no son relevantes. Pero como mencioné, no todos configuran su servidor correctamente (de hecho, muy pocos lo hacen), y existe la posibilidad de que el usuario Apache / Nginx / PHP difiera del usuario SSH / FTP, por lo que se agregan entre sí a entonces cada grupo respectivo permite que cada uno de ellos puedarwx
archivar como deberían.Según lo solicitado en Twitter y discutido en Meta , comenzaré aquí un tutorial de depuración para no desarrolladores.
Primero, creo que (incluso cuando magento intenta involucrarlo) Magento es demasiado complejo para un comerciante sin equipo de desarrollo / desarrollo. Pero si eres valiente y quieres probarlo, estamos dando lo mejor de ti para ayudarte. Creo que para algunas preguntas es la frontera entre "¿cómo puedo hacer esto?" y "haz mi trabajo, soy demasiado estúpido para googlear esto" es una línea muy fina. Entiendo que a menudo es difícil, piensa Google porque no sabes para qué buscas en Google, porque todavía no conoces el nombre. Dicho esto, recopilemos cosas que todos los que tienen una tienda de magento pueden hacer, incluso si no es desarrollador.
Sonassi ya dio una muy buena respuesta sobre cómo depurar magento, cuando quieres ensuciarte , pero trato de agregar cosas y copiar lo que creo que es aplicable para los comerciantes.
Modo de desarrollo
Desea tener errores reales, no esa página de "error" que Mgento entrega normalmente.
Gracias a fontis.com por esta imagen.
Los informes mencionados en la página se pueden encontrar en
var/reports/<the_number>
Cuando activa el modo de desarrollo, magento genera un error real, ¡estos errores pueden filtrar especialmente las credenciales, como las de la base de datos! ¡Entonces, piense antes de encenderlo en los servidores de producción!
Abra su
index.php
archivo en la carpeta raíz de magento, dependiendo de la versión, encontrará estas líneas alrededor de la línea 73:Para activar ahora el modo, debe cambiar estas líneas.
Si conoce su dirección IP (la mayoría de las personas recibe una nueva cada 24 horas, al menos en Alemania), google lo ayuda aquí:
Si no conoce su ip por alguna razón, puede mostrar errores para todos.
Inicio sesión
Magento registra muchas cosas en dos archivos:
var/log/exception.log
var/log/system.log
Las excepciones se registran siempre. El registro del sistema debe estar habilitado en el backend:
Establezca
Enabled
en Sí y verá más errores y mensajes de depuración ensystem.log
y dentroexception.log
¿Es un problema temático?
Tienes tu propio tema, esto está configurado en el backend aquí:
Sistema> Configuración> Diseño
Gracias a kb.magenting.com por la imagen.
Aquí puede configurar el paquete y el tema. Si desea intentar reproducir el error en el tema predeterminado, elimine todo de los campos de entrada. Luego haga clic en guardar y verá el tema estándar de magento como en la tienda de demostración , si tiene una tienda anterior a 1.8 puede encontrar una captura de pantalla en la Guía del usuario de Magento Community Edition
Si no puede reproducir el problema en el tema predeterminado, su tema está roto, comuníquese con el proveedor del tema. No damos soporte para temas de terceros, especialmente los comerciales.
¿Ahora que?
¿Encontró un error real, uno puede reproducirlo, es reproducible en el tema predeterminado? Genial, por favor abra una pregunta, y estamos dando nuestro mejor esfuerzo para ayudar.
En la pregunta:
fuente
Para usar los pasos anteriores, definitivamente debería obtener errores.
fuente
Traza de depuración
Esta es la buena función para depurar la llamada de función en magento.
Agregue esta función en include / config.php o cree un nuevo archivo y coloque todas sus funciones php usadas comúnmente.
OutPut será
fuente