Disclaimer: La mayor parte del código de betabeers ha sido programado en ratos libres, hasta ahora no me importaba mucho la pulcritud o la organización, ya que la prioridad era lanzar secciones o funcionalidades cuanto antes mejor.
Cuando uno programa sólo eso no importa mucho, el problema viene cuando más de una persona tiene que tocar y mantener el código.
Durante estas últimas semanas he estado separando las capas de la aplicación web para hacerlo siguiendo la estructura MVC (modelo, vista y controlador), todavía hay bastante trabajo con los modelos pero las vistas por lo menos ya están fuera de los controladores :)
La estructura de programación del proyecto no sólo era un caos, también lo era la organización de ficheros/carpetas y por otra parte había cosas en el repositorio GIT que no tenían que estar como los uploads, ya que hacían que cada git pull fuera un suplicio.
Comparto aquí algunas de las cosas que he ido haciendo para organizar mejor el código del repositorio GIT de betabeers :)
Mover y agrupar los estáticos fuera de la raíz
/static/img
/static/css
/static/js
/static/uploads
/static/cache
/static/humans.txt
/static/robots.txt
/static/favicon.ico
Crear reglas en htaccess para evitar enlaces rotos
RewriteRule ^img/(.*)$ http://betabeers.com/static/img/$1
RewriteRule ^js/(.*)$ http://betabeers.com/static/js/$1
RewriteRule ^css/(.*)$ http://betabeers.com/static/css/$1
RewriteRule ^humans.txt$ static/humans.txt
RewriteRule ^robots.txt$ static/robots.txt
RewriteRule ^favicon.ico$ static/favicon.ico
Actualizando rutas en la base de datos mysql
Con la siguiente query podéis remplazar todos los registros que coincidan con la búsqueda:
UPDATE Tabla SET contenido = replace(contenido, 'http://dominio.com/banners/', 'http://dominio.com/uploads/banners/') WHERE contenido LIKE '%/banners/%';
Eliminar ficheros y carpetas innecesarios del repositorio GIT
Había ficheros y carpetas que se habían borrado manualmente en el servidor, pensaba que se sincronizaban automáticamente pero resulta que hay que borrarlos manualmente con:
git rm fichero
git rm carpeta -r
Nota: Con el comando "git status", puedes ver que ficheros o carpetas han sido borradas pero siguen en el repositorio.
Mover los uploads a amazon S3
Hice un tutorial para sincronizar ficheros usando s3cmd via bash, no quería que las peticiones de los usuarios fueran más lentas cada vez que suben un fichero, por lo que he hecho que los uploads primero se suben en la web y un día a la semana se sincronizan a amazon s3.
Evitar que ficheros se añadan al repositorio GIT
GIT permite que ciertos ficheros o carpetas no se añadan al repositorio al ejecutar "git add", para ello se tiene que crear en la raíz un fichero .gitignore con el siguiente contenido por ejemplo:
static/uploads/*
static/cache/*
Estructura de ficheros final
Finalmente la estructura ha quedado así:
class/ <- clases internas y de terceros
config/ <- configuraciones de la app
controllers/ <- controladores o secciones de la app
models/ <- modelos de las tablas de la base de datos
static/ <- ficheros estáticos
views/ <- vistas
index.php <- raíz
setup.php <- fichero de inicialización
.gitignore <- fichero para evitar indexar en el repo
.htaccess <- rutas de apache
empezamos a usar symfony2 pero no sé si fue la versión que llego un punto que tenía que reiniciar el servidor una vez al día porqué se caía apache, así que decidí escribirlo desde cero aprovechando algunas clases que tenía de otros proyectos algunos los tengo subidos en github:
https://github.com/miquelcamps?tab=repositories
por ahora no usamos ni frameworks, ni ORM, pero este último si que me gustaría mirar de implementar en un futuro :)
Lo use hace mucho y parece ha mejorado, la gente habla mucho de eloquent the laravel. Y you uso el kohana, muy contento.
La verdad me dejas de piedra que SF2 te tirara el server de esa manera, había oído historias pero esto...supongo que también falta de configuracion optimizar etc...
Mirate el codigo de Open eShop/classifieds yo estoy seguro que verás cosas que te van a gustar, bien documentado y codigo simple y al grano.
https://github.com/open-classifieds/open-eshop
Cuando uno programa sólo eso no importa mucho, el problema viene cuando más de una persona tiene que tocar y mantener el código.
Durante estas últimas semanas he estado separando las capas de la aplicación web para hacerlo siguiendo la estructura MVC (modelo, vista y controlador), todavía hay bastante trabajo con los modelos pero las vistas por lo menos ya están fuera de los controladores :)
La estructura de programación del proyecto no sólo era un caos, también lo era la organización de ficheros/carpetas y por otra parte había cosas en el repositorio GIT que no tenían que estar como los uploads, ya que hacían que cada git pull fuera un suplicio.
Comparto aquí algunas de las cosas que he ido haciendo para organizar mejor el código del repositorio GIT de betabeers :)
Mover y agrupar los estáticos fuera de la raíz
/static/img
/static/css
/static/js
/static/uploads
/static/cache
/static/humans.txt
/static/robots.txt
/static/favicon.ico
Crear reglas en htaccess para evitar enlaces rotos
RewriteRule ^img/(.*)$ http://betabeers.com/static/img/$1
RewriteRule ^js/(.*)$ http://betabeers.com/static/js/$1
RewriteRule ^css/(.*)$ http://betabeers.com/static/css/$1
RewriteRule ^humans.txt$ static/humans.txt
RewriteRule ^robots.txt$ static/robots.txt
RewriteRule ^favicon.ico$ static/favicon.ico
Actualizando rutas en la base de datos mysql
Con la siguiente query podéis remplazar todos los registros que coincidan con la búsqueda:
UPDATE Tabla SET contenido = replace(contenido, 'http://dominio.com/banners/', 'http://dominio.com/uploads/banners/') WHERE contenido LIKE '%/banners/%';
Eliminar ficheros y carpetas innecesarios del repositorio GIT
Había ficheros y carpetas que se habían borrado manualmente en el servidor, pensaba que se sincronizaban automáticamente pero resulta que hay que borrarlos manualmente con:
git rm fichero
git rm carpeta -r
Nota: Con el comando "git status", puedes ver que ficheros o carpetas han sido borradas pero siguen en el repositorio.
Mover los uploads a amazon S3
Hice un tutorial para sincronizar ficheros usando s3cmd via bash, no quería que las peticiones de los usuarios fueran más lentas cada vez que suben un fichero, por lo que he hecho que los uploads primero se suben en la web y un día a la semana se sincronizan a amazon s3.
Evitar que ficheros se añadan al repositorio GIT
GIT permite que ciertos ficheros o carpetas no se añadan al repositorio al ejecutar "git add", para ello se tiene que crear en la raíz un fichero .gitignore con el siguiente contenido por ejemplo:
static/uploads/*
static/cache/*
Estructura de ficheros final
Finalmente la estructura ha quedado así:
class/ <- clases internas y de terceros
config/ <- configuraciones de la app
controllers/ <- controladores o secciones de la app
models/ <- modelos de las tablas de la base de datos
static/ <- ficheros estáticos
views/ <- vistas
index.php <- raíz
setup.php <- fichero de inicialización
.gitignore <- fichero para evitar indexar en el repo
.htaccess <- rutas de apache
07/03/2014 18:01
Entonces no tienes ni ORM ni nada? yo la verdad ahora con la velocidad de desarrollo que me dan estas herramientas me da panico no usarlas.
07/03/2014 18:25
https://github.com/miquelcamps?tab=repositories
por ahora no usamos ni frameworks, ni ORM, pero este último si que me gustaría mirar de implementar en un futuro :)
07/03/2014 19:45
Bueno al rollo, ORM:
http://redbeanphp.com/
Lo use hace mucho y parece ha mejorado, la gente habla mucho de eloquent the laravel. Y you uso el kohana, muy contento.
La verdad me dejas de piedra que SF2 te tirara el server de esa manera, había oído historias pero esto...supongo que también falta de configuracion optimizar etc...
Mirate el codigo de Open eShop/classifieds yo estoy seguro que verás cosas que te van a gustar, bien documentado y codigo simple y al grano.
https://github.com/open-classifieds/open-eshop
07/03/2014 19:46
oc --> la app clases controllers y Kohana
themes-> las vistas por theme