- Magento Front Controller
- Reinstalling Magento Modules
- Clearing the Magento Cache
- Magento’s Class Instantiation Abstraction and Autoload
- Magento Development Environment
- Logging Magento’s Controller Dispatch
- Magento Configuration Lint
- Slides from Magento Developer’s Paradise
- Generated Magento Model Code
- Magento Knowledge Base
- Magento Connect Role Directories
- Magento Base Directories
- PHP Error Handling and Magento Developer Mode
- Magento Compiler Mode
- Magento: Standard OOP Still Applies
- Magento: Debugging with Varien Object
- Generating Google Sitemaps in Magento
- IE9 fix for Magento
- Magento’s Many 404 Pages
- Magento Quickies
- Commerce Bug in Magento CE 1.6
- Welcome to Magento: Pre-Innovate
- Magento’s Global Variable Design Patterns
- Magento 2: Factory Pattern and Class Rewrites
- Magento Block Lifecycle Methods
- Goodnight and Goodluck
- Magento Attribute Migration Generator
- Fixing Magento Flat Collections with Chaos
- Pulse Storm Launcher in Magento Connect
- StackExchange and the Year of the Site Builder
- Scaling Magento at Copious
- Incremental Migration Scripts in Magento
- A Better Magento 404 Page
- Anatomy of the Magento PHP 5.4 Patch
- Validating a Magento Connect Extension
- Magento Cross Area Sessions
- Review of Grokking Magento
- Imagine 2014: Magento 1.9 Infinite Theme Fallback
- Magento Ultimate Module Creator Review
- Magento Imagine 2014: Parent/Child Themes
- Early Magento Session Instantiation is Harmful
- Using Squid for Local Hostnames on iPads
- Magento, Varnish, and Turpentine
If you’ve followed my work here, on Stack Overflow, or on Twitter, you know I have a perpetual bee in my bonnet over Magento Connect’s file permissions issues. There’s a few common cases where Magento Connect will tell you an extension is installed, but in actuality Connect couldn’t install the extension because of insufficient file permissions. Permissions are always a thorn in a developer’s side — but the Connect application’s willingness to lie to its users about an extension being installed crosses some invisible line of unacceptable behavior.
The Magento 2 team at eBay is aware of the problem, and working on it, but that leaves working Magento developers with the problem of never knowing what’s actually installed when clients or customers use Magento Connect. That’s why I’ve created a new command for n98-magerun called
extension:validate. Today we’ll cover how to use the command, as well as discuss some implementation details so you understand what the command is doing.
Using the Command
extension:validate command requires no arguments. If you run it you’ll see something like this
$ n98-magerun extension:validate Customchecoutstep -------------------------------------------------- Pulsestorm_Commercebug -------------------------------------------------- Auctionmaid_Matrxrate -------------------------------------------------- Problem: /path/to/magento/app/code/community/Webshopapps/Matrixrate/etc/config.xml Hash: MISMATCH Problem: /path/to/magento/app/etc/modules/Webshopapps_Matrixrate.xml Path: FILE NOT FOUND
When invoked with no options,
extension:validate will look at all the third party Magento Connect extensions a user has installed on their system, and validate their contents against the
In the above example, our system has the Magento Connect extensions
Pulsestorm_Commercebug were fine, but the
Auctionmaid_Matrxrate was missing a file (
Webshopapps_Matrixrate.xml), and one of the files didn’t match the stored hash (
config.xml). Not matching the stored hash means the file’s been modified/edited.
Troubleshooting Connect Details
While this tool is useful, it’s not a cure all. Once you’ve detected problems with an extension you’ll need to figure out why they happened. In other words, are they real problems or intended changes from more reckless developers. There’s a good chance the original package for an extension will be in the
folder. This where Magento Connect downloads the packages prior to installing them. Copying a package from here and extracting the files will let you replace missing files or run a diff to see what’s changed.
extension:validate command reads the package information from the
file. Despite being named
cache.cfg, this really isn’t a cache file — it’s the file Magento Connect reads from when it lists out the installed packages on the system, and effectively acts as the source of truth for what is and isn’t installed.
If I speculate, the reason this file is named cache is it’s a cached list of what’s installed on the system. In other words the entire Magento system itself is the actual thing, and this file is just a cache. However, this falls apart when you consider there’s no way to query the Magento system itself for a list of installed packages, and the Magento Connect downloader always reads from this file. Another example of “The best laid plans …” problem.
extension:validate command will also let you check a single extension. Just pass in the extension’s name as the first argument
$ n98-magerun extension:validate Auctionmaid_Matrxrate Auctionmaid_Matrxrate -------------------------------------------------- Problem: /path/to/magento/app/code/community/Webshopapps/Matrixrate/etc/config.xml Hash: MISMATCH Problem: /path/to/magento/app/etc/modules/Webshopapps_Matrixrate.xml Path: FILE NOT FOUND
This is useful to run right after you’ve installed an extension to make sure it’s installed correctly. Keep in mind you need to use the Magento Connect Name for an extension, and not the
Namespace_Modulename module name. (
If you only want to do a specific type of check — that is only check if a file is missing, or if the hash matches — there’s options to skip each test type.
$ n98-magerun help extension:validate ... --skip-file If set, command will skip reporting the existence of package files --skip-hash If set, command will skip validating the package file hashes
You use them like this.
n98-magerun extension:validate --skip-file n98-magerun extension:validate --skip-hash n98-magerun extension:validate Auctionmaid_Matrxrate --skip-file n98-magerun extension:validate Auctionmaid_Matrxrate --skip-hash
There’s also the
--full-report command which will list all the files for an extension — not just the problematic ones.
$ n98-magerun extension:validate Auctionmaid_Matrxrate --full-report Auctionmaid_Matrxrate -------------------------------------------------- Checking: /path/to/magento/app/code/community/Webshopapps/Matrixrate/Block/Adminhtml/Shipping/Carrier/Matrixrate/Grid.php Path: OK Hash: OK Checking: /path/to/magento/app/code/community/Webshopapps/Matrixrate/Block/Adminhtml/System/Config/Form/Field/Exportmatrix.php Path: OK Hash: OK //... Checking: /path/to/magento/app/etc/modules/Webshopapps_Matrixrate.xml Problem: /path/to/magento/app/etc/modules/Webshopapps_Matrixrate.xml Path: FILE NOT FOUND
Useful if you’re curious what, exactly, a Magento Connect package has dropped on your server.
Magento Connect for Upgrades
In addition to installing third party extensions, Magento Connect’s other big feature is enabling package based updates of the Magento system itself. It does this by having the following 36 packages installed by default when you initialize a Magento Connect system.
'Cm_RedisSession','Interface_Adminhtml_Default',' Interface_Frontend_Base_Default','Interface_Frontend_Default',' Interface_Frontend_Rwd_Default','Interface_Install_Default','Lib_Cm',' Lib_Credis','Lib_Google_Checkout','Lib_Js_Calendar','Lib_Js_Ext',' Lib_Js_Mage','Lib_Js_Prototype','Lib_Js_TinyMCE','Lib_LinLibertineFont', 'Lib_Mage','Lib_Magento','Lib_Phpseclib','Lib_Varien','Lib_ZF',' Lib_ZF_Locale','Mage_All_Latest','Mage_Centinel','Mage_Compiler',' Mage_Core_Adminhtml','Mage_Core_Modules','Mage_Downloader',' Mage_Locale_de_DE','Mage_Locale_en_US','Mage_Locale_es_ES',' Mage_Locale_fr_FR','Mage_Locale_nl_NL','Mage_Locale_pt_BR',' Mage_Locale_zh_CN','Magento_Mobile','Phoenix_Moneybookers'
This has always struck me as a little bit crazy. Because Magento Connect installations aren’t transactional, this creates a situation where an install that fails due to network connectivity issues or un-handled corner cases can leave a Magento installation in a “half-upgraded” state. If you’ve spent any time on the Magento forums or the various Stack Exchange sites, you know this is more than a theoretically concern.
Regardless, if you or your client are managing upgrades via Magento Connect, you may include these packages with the
$ n98-magerun extension:validate --include-default
Be warned though, since it’s effectively running through every Connect managed file in your Magento application it’ll take a bit longer to finish. This is also a potentially useful way to keep your application “core hack” free. Finally, these extension names are hard-coded into the
extension:validate command. If Magento adds any packages in the future,
extension:validate will see them as 3rd party extensions until the
n98-magerun command is updated with a new extension list. If anyone know a way to query something for a list of official packages, pull requests are welcome.
extension:validate command is available in the develop branch of the
n98-magerun source. It looks like the application is getting monthly-ish releases, so this should be available in the official release soon. If you run into problems or have feature suggestions, please let me know.