Magento 2 – [Error] Setup version for module ‘Namespace_Modulename’ is not specified

Empecé a desarrollar un módulo para Magento 2  de la siguiente manera.

Creé una entrada para mi módulo en el fichero app/etc/config.php de la siguiente manera

'Namespace_Modulename' => 1,

Luego creé el fichero de configuración module.xml en app/code/Namespace/Modulename/etc/module.xml

<?xml version="1.0"?>
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
 <module name="Namespace_Modulename" setup_version="2.0.1"/>
 </config>

Todo iba bien, hasta que un día actualicé Magento y dejó de funcionar mostrándome el siguiente error:

Error

Setup version for module 'Namespace_Modulename' is not specified
#0 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Module/DbVersionInfo.php(56): Magento\Framework\Module\DbVersionInfo->isModuleVersionEqual('Namespace_Modulename', false)
#1 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Module/DbVersionInfo.php(79): Magento\Framework\Module\DbVersionInfo->isSchemaUpToDate('Namespace_Modulename')
#2 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Module/Plugin/DbStatusValidator.php(55): Magento\Framework\Module\DbVersionInfo->getDbVersionErrors()
#3 [internal function]: Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#4 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#5 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'storeCookieVali...')
#6 /srv/www/local.magento2.com/app/code/Magento/Store/Model/Plugin/StoreCookie.php(78): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#7 [internal function]: Magento\Store\Model\Plugin\StoreCookie->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#8 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#9 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'front-controlle...')
#10 /srv/www/local.magento2.com/app/code/Magento/PageCache/Model/App/FrontController/VarnishPlugin.php(55): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#11 [internal function]: Magento\PageCache\Model\App\FrontController\VarnishPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#12 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#13 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Interceptor.php(136): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'front-controlle...')
#14 /srv/www/local.magento2.com/app/code/Magento/PageCache/Model/App/FrontController/BuiltinPlugin.php(68): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#15 [internal function]: Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#16 /srv/www/local.magento2.com/lib/internal/Magento/Framework/Interception/Interceptor.php(141): call_user_func_array(Array, Array)
#17 /srv/www/local.magento2.com/var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#18 /srv/www/local.magento2.com/lib/internal/Magento/Framework/App/Http.php(115): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#19 /srv/www/local.magento2.com/lib/internal/Magento/Framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#20 /srv/www/local.magento2.com/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#21 {main}

El caso es que a partir de Septiembre-Octubre de 2015 el equipo de Magento decidió incorporar un paso mas en la creación de un módulo.

Solución

Tienes que crear un fichero registration.php en el directorio de tu módulo con el siguiente contenido.

app/code/Namespace/Modulename/registration.php

<?php
use Magento\Framework\Component\ComponentRegistrar;
$name = implode('_', array_map(function($part) {
    return implode(array_map('ucfirst', explode('-', $part)));
}, array_slice(explode(DIRECTORY_SEPARATOR, __DIR__), -2, 2)));
ComponentRegistrar::register(ComponentRegistrar::MODULE, $name, __DIR__);

Ahora solo tendrás que ejecutar bin/magento setup:upgrade y ya tendrás tu modulo configurado.

Los 11 Recursos startups indispensables

Hoy me hace ilusión compartir contigo una serie de recursos startups que pueden resultarte de mucha utilidad en la fase de creación. Estos recursos los conocí en el evento We Start Social en el que teníamos que desarrollar crear una startup en tan solo un fin de semana.

Creación de Landing pages

strikingly
Creación rápida de websites.

 

 

 

Continúa leyendo Los 11 Recursos startups indispensables

Review Libro Speaking JavaScript: An In-Depth Guide for Programmers

Speaking JavaScript Book Cover Speaking JavaScript
Axel Rauschmayer
Computers
"O'Reilly Media, Inc."
2014-02-25
460

Si conoces los fundamentos de Javascript puro te será mucho mas fácil entender algún Framework que superponga una capa a un nivel superior, así que con este libro te sumerges en la arquitectura de Javascript a un nivel muy profundo.

Una vez que leas el libro, podrás entender como realizar herencia en Javascript, como funciona el auto semicolom, como se gestiona la memoria, etc.

Es difícil encontrar un libro que profundice tanto, así que si quieres llegar a dicha profundidad este es un libro muy recomendable. Cuando realicé la lectura, yo me salté algunas cosas que bajaban mucho en la infraestructura, pero espero releer el libro y entrar en profundidad en dichos conceptos.

 

Review Libro The CSS3 Anthology: Take Your Sites to New Heights

The CSS3 Anthology Book Cover The CSS3 Anthology
Rachel Andrew
Computers
Sitepoint Pty Limited
2012
420

Con este libro podrás tener desde conceptos básico a no tan básicos de CSS3, bajo mu punto de vista algunas veces resuelven problemas avanzados cuando puede que el usuario que esté leyendo el libro no sea tan avanzado.

Por lo demás, es un libro muy completo  y que seguro que volveré a el cuando tenga alguna dudad de como funciona la propiedad  display en una página, la propiedad float, etc.

El libro es bastante completo y son conceptos puros que debes de conocer, aunque luego utilices algún famoso Framework que suelen estar tanto de moda. Si conoces como está hecho internamente te será mucho mas fácil aprender estos frameworks.

Review libro Vagrant

Vagrant: Up and Running Book Cover Vagrant: Up and Running
Mitchell Hashimoto
Computers
"O'Reilly Media, Inc."
2013-05-30
158

El Autor del libro "Michell Hashimoto" Es el creador de la tecnología, por lo que tendrás de primera mano la información de mayor calidad acerca de la tecnología.

Es una lectura bastante llevadera y no es muy extensa, después de leer el libro tendrás los siguientes conocimientos:

  • Poder crear una máquina virtual, de una manera muy limpia y elegante.
  • Conocer los métodos de provisionado(Chef,Ansible,etc.) de una máquina
  • Poder levantar un entorno de varias máquinas con un único fichero de configuración
  • Crear una imagen, la cual tomar de base para la creación de tus entornor.
  • etc.

Vagrant y Magento – El placer de hacer un rm -rf * /

Esta entrada pertenece a una serie de artículos para la creación de un completo entorno de desarrollo php.

La he liado parda

Si alguna vez has hecho un  rm -rf * /  con superusuario, la has liado parda  además si lo has hecho en un servidor la has liado muy parda . Liemosla parda con Vagrant Magento

Bueno, te preguntarás ¿De qué va esto? Esto va de poder tener un entorno en que no tengas miedo de ningún tipo en romperlo porque en 5 minutos tienes un entorno igual al que rompiste.

Continúa leyendo Vagrant y Magento – El placer de hacer un rm -rf * /

Entorno de desarrollo php

Esta entrada pertenece a una serie de artículos para la creación de un completo entorno de desarrollo php.

En Esta entrada mencionaré el Entorno de desarrollo php que he ido construyendo a lo largo de los años en base a mi experiencia, en mi caso lo estoy utilizando para Magento, por lo que tendremos una parte específica en la que se mencionarán herramientas exclusivas para Magento.

Por un lado me gusta estar rodeado de herramientas que me permitan entender el funcionamiento de Magento desde el mas bajo nivel y por otro me gusta las herramientas que me aportan una comodidad en las tareas que ocupan mi día a día y lo mas importante, 

Me gusta trabajar sin miedo a romper las cosas

Dividamos todas las herramientas en varios grupos, aunque estemos tratando un entorno de desarrollo php, estas herramientas deben de tener su equivalente en cualquier lenguaje, son los elementos bajo mi punto de vista que cualquier desarrollador debería de tener independientemente del lenguaje.

Continúa leyendo Entorno de desarrollo php

Review Libro Magento PHP Developer’s Guide

Magento PHP Developer's Guide Book Cover Magento PHP Developer's Guide
Allan MacGregor
Business & Economics
Packt Publishing Ltd
2013-04-04
256

Este libro está escrito para desarrolladores que tienen una cierta experiencia con PHP y Frameworks PHP, tales como Zend o CakePHP y quieran empezar a desarrollar con Magento. También es útil para desarrolladores que tienen una experiencia previa en Magento.

Este libro va dedicado a aspirantes o desarrolladores Magento . Te introduce muy bien en la arquitectura Magento, explica un entorno correcto de trabajo,  metodología de trabajo, etc.

Mi opinión personal hacia este libro es muy buena, me gustó mucho, me pareció muy fácil de leer y me aportó muchos recursos. Es una lectura muy recomendada.

Review Libro Easy PHP Websites with the Zend Framework

Easy PHP Websites Book Cover Easy PHP Websites
W. Jason Gilmore
MySQL (Electronic resource)
2009
317

Magento es el resultado de la creación de un CMS optimizado para ventas basado en el Framework Zend.

Es interesante pensar en Magento no solo como un software de venta online sino como una solución del equipo de desarrollo de Magento para obtener producto  en base a unas especificaciones con buenas prácticas de programación, usando patrones de diseño y tomando como base  Zend Framework.

Este libro explica como crear una web a partir de Zend, es interesante desde el punto de vista que explica como funcionan los bloques, los controladores, etc. a un nivel mas profundo que lo que estamos acostumbrados en Magento.

Zend ofrece mucha funcionalidad OTTB que puede ahorrarte mucho tiempo de desarrollo, por eso antes de realizar cualquier desarrollo deberías de buscar en el framework si la funcionalidad que vas a implementar existe de partida. En este caso, el libro si que te ayuda a aplicar esta metodología de trabajo.

Bajo mi punto de vista, el libro se me hizo un poco largo al final pero es muy interesante para ir un poco mas allá y entender Magento desde el punto de Arquitectura del Software

Review Libro Git Pro

Pro Git Book Cover Pro Git
Scott Chacon
Computers
Apress
2009-08-27
288

Git es un Control de Versiones Distribuido(DVCS) desarrollado por Linus Torvalds .

Git es el único Control de Versiones con el que he trabajado en mi experiencia profesional y este me ofrece todo lo que necesito de un Control de Versiones. A mi me ha ahorrado miles de horas de trabajo, por eso me declaro un fan de Git, como consejo, si apuestas en una tecnología, formate en ella para poder exprimirla al máximo.

Es este libro podrás introducirte en la arquitectura y tratar conceptos desde básicos hasta avanzados, conocer herramientas nativas de Git, herramientas para facilitar el día a día.

Si decides leer el libro, intenta leer la última edición, ya que en está vendrá información de las últimas mejoras de la tecnología en cuestión.