fix(builder): robustecer carga local de elementor en windows
This commit is contained in:
1
GEMINI.md
Normal file
1
GEMINI.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
## Gemini Added Memories- El flujo principal del proyecto GKACHELE™ es:1. **Visita a la Landing Page (`/`):** Un visitante llega.2. **Solicitud de Plan:** El cliente selecciona un plan, lo que abre un menú desplegable con un formulario. Lo rellena.3. **Redirección al Registro (`/register`):** Al enviar el formulario, es redirigido a `/register` para completar su registro.4. **Creación del Sitio en Borrador (`/customizer`):** El cliente diseña su página en modo borrador.5. **Envío de Solicitud:** El cliente envía su sitio para aprobación.6. **Tu Dashboard de Administrador (`/dashboard`):** La solicitud aparece en tu panel de control.7. **Aprobación o Rechazo Manual:** Tú revisas la solicitud y decides si la apruebas o la rechazas.8. **Panel de Cliente (`/admin`):** Si apruebas, el sitio se publica y se crea el panel de gestión para el cliente.9. **Visualización Pública:** El sitio aprobado se hace visible al público.- El proyecto del usuario está desplegado en una Raspberry Pi (IP local 192.168.1.134) como un servicio systemd (`gkachele-saas.service`). La actualización de código se realiza desde su PC (WSL) copiando archivos vía scp y reiniciando el servicio en la Raspberry Pi.- Para levantar el entorno de prueba del proyecto en el directorio 'demo/', los pasos son: 1. Navegar a `cd demo`. 2. Instalar dependencias con `pip install -r requirements.txt`. 3. Ejecutar la aplicación con `python3 app.py`. La aplicación correrá localmente, generalmente en `http://127.0.0.1:5000`.- El proyecto se llama GKACHELE™ y es un SaaS (Software as a Service) para crear sitios web, al estilo de un WordPress auto-alojado.- El backend del proyecto GKACHELE™ es una aplicación monolítica en Python/Flask, con el código principal ubicado en el directorio `demo/`.- El proyecto GKACHELE™ utiliza un motor de plantillas propio (`demo/utils/theme_engine.py`) que imita la funcionalidad de WordPress y actualmente usa una base de datos SQLite (`demo/database/main.db`).- El despliegue actual del proyecto GKACHELE™ es un proceso manual en una Raspberry Pi, utilizando scripts `scp` y gestionando el servicio con `systemd`. El control de versiones se realiza con Gitea.- El objetivo principal con el proyecto GKACHELE™ es modernizarlo de forma incremental. El plan es: 1. **Contenerizar la aplicación con Docker.** (LISTO - Dockerfile creado). 2. **Automatizar los despliegues (CI/CD) usando Gitea Actions.** (LISTO - Runner configurado y funcionando). 3. **Implementar Nuevo Customizer (Apple Style).** (EN PROGRESO - Estructura saas-demo replicada, falta pulir bugs). 4. **Configurar Secretos de Gitea.** (Pendiente por el usuario: Docker Hub y SSH keys). 5. **Migrar la base de datos a PostgreSQL.** (Pendiente). 6. **Migración final a VPS.** (Fácil después de validar Docker en la Pi).- **Estado Customizer (02/02/2026):** - Se ha reemplazado `customizer.html` usando `saas-demo.html` como base estricta (Estilo "Apple"). - Se han integrado los campos de Rubros (Menú, Contacto) en el sidebar nativo. - **BUG REPORTADO:** El desplazamiento/arrastre de bloques en el menú lateral falla ("no funciona desplazar el menu lateral como bloques"). POSIBLE CAUSA: Conflicto de scroll en sidebar o evento dragstart. - **FEATURE REQUEST:** Background de imagen debe estar disponible en TODOS los planes. Background de video SOLO en Premium.- **Hash de Seguridad (Customizer):** `96CA...B852` (Generado el 02/02/2026).- El archivo `.gitea/workflows/deploy.yml` define el workflow de CI/CD para la app GKACHELE™. Se activa con `push` a la rama `feature/docker-setup` o manualmente.- Los pasos del workflow de Gitea Actions incluyen: checkout de código, login a Docker Hub, build y push de la imagen Docker, y despliegue en Raspberry Pi vía SSH.- El usuario debe commitear y hacer push del archivo `deploy.yml` a Gitea, y luego configurar los secretos necesarios en la interfaz de Gitea.- Un paso futuro clave es la creación de un archivo `docker-compose.yml` específico para la Raspberry Pi.- El usuario de Gitea del proyecto es 'admin'.- La Raspberry Pi del usuario usa el hostname `komkida.duckdns.org` para acceso SSH (puerto 2222). La aplicación y Gitea usan `gk-saas.komkida.duckdns.org`.- Gitea actions activado en `app.ini`. Runner `rpi-runner-1` activo.
|
||||||
@@ -40,7 +40,7 @@ def handle_404(e):
|
|||||||
|
|
||||||
@app.errorhandler(Exception)
|
@app.errorhandler(Exception)
|
||||||
def handle_exception(e):
|
def handle_exception(e):
|
||||||
print(f"❌ EXCEPCIÓN: {e}")
|
print(f"ERROR: EXCEPCION: {e}")
|
||||||
return jsonify({'success': False, 'error': str(e)}), 500
|
return jsonify({'success': False, 'error': str(e)}), 500
|
||||||
|
|
||||||
# Middleware
|
# Middleware
|
||||||
@@ -51,5 +51,5 @@ def add_header(response):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print(f"🚀 GKACHELE™ SaaS Modular iniciado en puerto {PORT}")
|
print(f"GKACHELE SaaS Modular iniciado en puerto {PORT}")
|
||||||
app.run(debug=True, host='0.0.0.0', port=PORT)
|
app.run(debug=True, host='0.0.0.0', port=PORT)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -22,7 +22,7 @@ def scan_available_themes():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(config_path, 'r', encoding='utf-8') as f:
|
with open(config_path, 'r', encoding='utf-8-sig') as f:
|
||||||
config = json.load(f)
|
config = json.load(f)
|
||||||
|
|
||||||
themes[theme_dir] = {
|
themes[theme_dir] = {
|
||||||
@@ -38,7 +38,7 @@ def scan_available_themes():
|
|||||||
'preview': f'/themes/{theme_dir}/preview.jpg' if os.path.exists(os.path.join(theme_path, 'preview.jpg')) else None
|
'preview': f'/themes/{theme_dir}/preview.jpg' if os.path.exists(os.path.join(theme_path, 'preview.jpg')) else None
|
||||||
}
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"⚠️ Error cargando template {theme_dir}: {e}")
|
print(f"WARNING: Error cargando template {theme_dir}: {e}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return themes
|
return themes
|
||||||
@@ -50,10 +50,10 @@ def get_theme_config(theme_id):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(config_path, 'r', encoding='utf-8') as f:
|
with open(config_path, 'r', encoding='utf-8-sig') as f:
|
||||||
return json.load(f)
|
return json.load(f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"⚠️ Error cargando config de {theme_id}: {e}")
|
print(f"WARNING: Error cargando config de {theme_id}: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_themes_by_rubro(rubro, user_plan='base'):
|
def get_themes_by_rubro(rubro, user_plan='base'):
|
||||||
@@ -127,7 +127,7 @@ def render_gkachele_template(theme, content, site_id=None, user_id=None):
|
|||||||
menus = get_site_menus(site_id, user_id)
|
menus = get_site_menus(site_id, user_id)
|
||||||
widgets = get_site_widgets(site_id, user_id)
|
widgets = get_site_widgets(site_id, user_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"⚠️ Error obteniendo menús/widgets: {e}")
|
print(f"WARNING: Error obteniendo menus/widgets: {e}")
|
||||||
|
|
||||||
theme_template = ''
|
theme_template = ''
|
||||||
theme_path = os.path.join(THEMES_DIR, theme, 'template.html')
|
theme_path = os.path.join(THEMES_DIR, theme, 'template.html')
|
||||||
|
|||||||
Reference in New Issue
Block a user