l'installation d'un module par programme
-
16-10-2019 - |
Question
Je dois installer des modules afin que les changements de base de données se produisent. Je ne peux pas que ce soit une installation sur l'exploitation type d'administration de l'approche que j'ai un script bash que j'utilise pour fournir mes serveurs de test. Il semble que je clone modules de mon git repo certains d'entre eux ne sont pas installés, alors je dois les installer avec force dans le script php je cours qui ajoute mes magasins de test et de ce pas. Je l'ai regardé à travers toutes sortes de classe et le meilleur que j'ai trouvé est
isModuleOutputEnabled ()
Mais cela ne va pas le couper. Des idées sur la façon de faire une force d'installation?
Identification possible de la question
Il semble si simple effacement du cache et en appelant le Mage::app()
et même essayer de se connecter à un administrateur ne parvient pas à déclencher les modules à installer. Mais si vous videz le cache à la main, juste avant la première fois que vous allez à la / écran de connexion admin, il installera alors les choses que vous attendez. À ce jour obtenir la page (wget
) avant d'effacer le cache échoue également à installer les modules.
Mise à jour 1
J'ai essayé de faire un peu de force, mais je ne comprends pas ce qui se passe ... la charge des extensions très bien quand j'attends qu'après la nouvelle installation et il suffit de placer les fichiers dans les dossiers, mais quand je clone en avance, je ne vois pas dans le tableau de core_resource
ou la table pour les modules. Exemple test pour le post script d'installation est
$resource = Mage::getSingleton('core/resource');
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
echo "Test modules";
if(isset($modulesArray['Aoe_AsyncCache'])) {
echo "AsyncCache exists.";
$tableName = $resource->getTableName('asynccache');
/**
* if prefix was 'mage_' then the below statement
* would print out mage_catalog_product_entity
*/
echo "known as ".$tableName;
} else {
echo "AsyncCachedoesn't exist.";
}
Quand je vois courais AsyncCache exists. known as 'asynccache'
mais il est pas dans la base de données. Ce tableau n'a pas été installé. Pas encore, le module n'installe bien si j'attends ... Mais curieusement, si je fais ce clone git, il installe jamais. Je suis vraiment pas sûr de ce qui se passe.
Mise à jour 2
Je semble que tout module qui a une base de données liée à elle n'est pas installé. Donc, fond sur ce qui se passe. J'utilise vagrant
et il est sur une url de http://local.mage.dev comme l'url. Maintenant, quand j'utilise le script provision.sh, je l'ai installer Magento du ssh. Je ne en décrochage. Mais un excellent exemple de la question est que lorsque je donc un simple,
./mage config-set preferred_state alpha
./mage clear-cache
./mage sync
./mage download community BL_CustomGrid
./mage install community BL_CustomGrid
Le tableau n'est pas installé. Je ne comprends pas pourquoi. Magento est installé. Si j'attends le premier journal que je peux en utiliser de connexion pour effectuer l'installation. Je reçois un avis sur la ligne de commande qu'il a installer BL_CustomeGrid très bien, mais il n'a pas ... les tables ne sont pas là.
Update3
J'ai essayé de combiner toutes les suggestions pour un. J'ai l'application Mage invoquée après chaque clone de GitHub, le cache est effacé. Je puis effacer le cache une dernière fois avant de me connecter. Je ne vois pas pour obtenir la table installée. Je me demande presque si elle a quelque chose à voir avec le errante, mais semble être peu probable que Magento n'installe. Mais la preuve de ce que je l'ai fait, voici le sous question à appeler le script php qui ne fait rien, mais l'invocation et mage de vider le cache.
Update4
Important:
Je n'ai pas fait seulement un test où je reconfirmé que si je fais l'installer après l'installation magento. Le journal normal, télécharger des fichiers, effacer le cache, fermez la session, reconnectez-vous et le module est installé. Mais quand j'ajouter un login programme de l'utilisateur admin, je fais l'écho que l'utilisateur est en loged, et même tu que je videz le cache, il échoue encore.
Le but est celui-là, je dois trouver le install('module_name')
ou quelque chose comme ça, ou deux, être en mesure de faire 100% ce qui se passe lorsque l'utilisateur se connecte à Clears caches et les journaux arrière.
réplication Programmatic de la façon dont un module est installé, nous savons (fermeture de session, effacer le cache, etc ..) échoue
Les scripts en jeu
Le scriptqui appelle install-Invoke-app.php Et donc il y a plein contexte, voici la function.sh qui est appelé et où vous pouvez voir que l'invocation du Mage est fait
provision.sh
C'est ce qu'on appelle de vagrant
qui configure mon banc d'essai et d'installer une installation complète Magento programme
start_seconds=`date +%s`
echo -en "\a" > /dev/tty5 | echo -e "\a"
cd /srv/www/
. scripts/install-functions.sh
if [[ has_network ]]
then
apt-get install pv
cd /srv/www/
. scripts/install-prep.sh
cd /srv/www/
. scripts/main-install.sh
else
echo -e "\nNo network connection available, skipping package installation"
fi
#double check the network
if [[ has_network ]]
then
#check and install wp
cd /srv/www/
. scripts/db-install.sh
#check and install magento
cd /srv/www/
. scripts/mage-install.sh
else
echo -e "\nNo network available, skipping network installations"
fi
# Add any custom domains to the virtual machine's hosts file so that it
# is self-aware. Enter domains space delimited as shown with the default.
DOMAINS='local.mage.dev'
if ! grep -q "$DOMAINS" /etc/hosts
then echo "127.0.0.1 $DOMAINS" >> /etc/hosts
fi
end_seconds=`date +%s`
echo "-----------------------------"
install-functions.sh
Ceci est juste quelques-unes des fonctions de ce script bash. Il est seulement ce qui est utilisé dans cet ensemble du serveur d'installation. Notez que c'est là que nous appelons php "/srv/www/scripts/mage/install-invoke-app.php"
qui est ce qui devrait être Invoquer le MAGE et l'installation des modules. Maintenant, les extensions doivent avoir été installés par programme. Ce ne se produit pas.
install_repo(){
if [ $2 ]
then
echo "just 1"
git clone $1 -q
else
echo "just 1 and 2"
git clone $1 $2 -q
fi
success=$?
if [[ $success -eq 0 ]];
then
echo "Repository successfully cloned."
echo "cleaning"
cd $r/
rm -rf LICENSE.txt STATUS.txt README.md RELEASE_NOTES.txt modman
cd ../
cp -af $r/* .
rm -rf $r/
#eval $3
php "/srv/www/scripts/mage/install-invoke-app.php"
#if [ -z "$3" ]
#then
# echo "no callback"
#else
# eval $3
#fi
else
echo "Something went wrong!"
fi
sleep 1 # slow it down to insure that we have the items put in place.
}
#declare -A list = ( [repo]=gitUser )
install_repolist(){
gitRepos=$1
for r in "${!gitRepos[@]}" #loop with key as the var
do
giturl="git://github.com/${gitRepos[$r]}/$r.git"
echo "Adding $r From $giturl"
if [ -z "$r" ];
then
echo
else
install_repo $giturl $2 $3
fi
echo
done
return 1
}
install-mage.sh
Ceci est appelé après le script provision.sh a installé toutes les bases du serveur. Il devrait déjà avoir nginx
et php5
/ php-fpm
et tout le reste des modules nécessaires.
#!/bin/bash
cd /srv/www/mage/ #move to the root web folder
dbhost="localhost"
dbname="mage"
dbuser="devsqluser"
dbpass="devsqluser"
url="local.mage.dev"
adminuser="admin"
adminpass="admin2013"
adminfname="Mc"
adminlname="Lovin"
adminemail="test.user@wsu.edu"
echo
echo "We will clear any past install"
echo
echo "--Clear old caches reports and sessions"
cd /srv/www/mage/ #move to the root web folder
rm -rf ./var/cache/* ./var/session/* ./var/report/* ./var/locks/*
rm -rf ./var/log/* ./app/code/core/Zend/Cache/* ./media/css/* ./media/js/*
echo
if [ -f /srv/www/scripts/mage/clean.sql ]
then
mysql -u root -pblank $dbname < /srv/www/scripts/mage/clean.sql | echo -e "\n Initial custom mage cleaning MySQL scripting..."
else
echo -e "\n COUNLDN'T FIND THE CLEANER SQL FILE"
fi
echo "Now installing Magento with sample data..."
#chack to see if there is already the files ready for instalation
if [ ! -f /srv/www/mage/app/Mage.php ]
then
if [ ! -f /srv/www/mage/magento-1.7.0.2.tar.gz ]
then
echo
echo "didn't find the packages, so now Downloading them..."
echo
wget http://www.magentocommerce.com/downloads/assets/1.7.0.2/magento-1.7.0.2.tar.gz
wget http://www.magentocommerce.com/downloads/assets/1.6.1.0/magento-sample-data-1.6.1.0.tar.gz
fi
echo
echo "Extracting data..."
echo
pv -per magento-1.7.0.2.tar.gz | tar xzf - -C ./
pv -per magento-sample-data-1.6.1.0.tar.gz | tar xzf - -C ./
echo
echo "Moving files..."
echo
cp -af magento-sample-data-1.6.1.0/media/* media/
cp -af magento-sample-data-1.6.1.0/magento_sample_data_for_1.6.1.0.sql data.sql
cp -af magento/* magento/.htaccess .
cd /srv/www/mage/ #move to the root web folder
echo
echo "Setting permissions..."
echo
chmod o+w var var/.htaccess app/etc
chmod -R o+w media
fi
echo
echo "Installing Adminer..."
if [ ! -f /srv/www/mage/adminer.php ]
then
wget http://downloads.sourceforge.net/adminer/adminer-3.7.1-mysql-en.php > adminer.php
fi
echo
echo "Importing sample products..."
mysql -h $dbhost -u $dbuser -p$dbpass $dbname < data.sql
#pear mage-setup .
#pear install magento-core/Mage_All_Latest-stable
#./mage mage-setup .
#./mage config-set preferred_state stable
echo
echo "Initializing PEAR registry..."
pear mage-setup .
echo
echo "Downloading packages..."
pear install magento-core/Mage_All_Latest
echo
echo "Cleaning up files..."
rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*
rm -rf magento/ magento-sample-data-1.6.1.0/
#rm -rf magento-1.7.0.2.tar.gz magento-sample-data-1.6.1.0.tar.gz data.sql
rm -rf index.php.sample .htaccess.sample php.ini.sample LICENSE.txt
rm -rf STATUS.txt LICENSE.html LICENSE_AFL.txt RELEASE_NOTES.txt
echo
echo "Installing Magento..."
php -f install.php --\
--license_agreement_accepted yes \
--locale en_US \
--timezone America/Los_Angeles \
--default_currency USD \
--db_host $dbhost \
--db_name $dbname \
--db_user $dbuser \
--db_pass $dbpass \
--url $url \
--use_rewrites yes \
--skip_url_validation yes \
--use_secure no \
--secure_base_url "" \
--use_secure_admin no \
--admin_firstname "$adminfname" \
--admin_lastname "$adminlname" \
--admin_email "$adminemail" \
--admin_username "$adminuser" \
--admin_password "$adminpass"
if [ ! -f /srv/www/mage/app/etc/local.xml ]
then
echo "failed install try it again"
else
if [ -f /srv/database/init-mage.sql ]
then
mysql -u root -pblank < /srv/database/init-mage.sql | echo -e "\nInitial custom mage MySQL scripting..."
else
echo -e "\nNo custom MySQL scripting found in database/init-mage.sql, skipping..."
fi
cd /srv/www/mage/
echo "Starting to import base WSU modules from connect"
#./mage install http://connect20.magentocommerce.com/community Flagbit_ChangeAttributeSet
./mage config-set preferred_state alpha
./mage clear-cache
./mage sync
./mage download community Flagbit_ChangeAttributeSet
./mage download community BL_CustomGrid
./mage install community Flagbit_ChangeAttributeSet
#./mage install community BL_CustomGrid
echo "Starting to import base WSU modules fro github"
declare -A gitRepos
#[repo]=gitUser
gitRepos=(
[wsu_admin_base]=jeremyBass
[wsu_base_theme]=jeremyBass
[Storeutilities]=jeremyBass
[StructuredData]=jeremyBass
#[Storeuser]=jeremyBass
[sitemaps]=jeremyBass
[webmastertools]=jeremyBass
[ldap]=jeremyBass
[Aoe_FilePicker]=jeremyBass #https://github.com/fbrnc/Aoe_FilePicker.git
[Aoe_ClassPathCache]=jeremyBass #https://github.com/fbrnc/Aoe_ClassPathCache.git
[Aoe_Profiler]=jeremyBass #https://github.com/fbrnc/Aoe_Profiler.git
[Aoe_ManageStores]=jeremyBass #https://github.com/fbrnc/Aoe_ManageStores.git
[Aoe_LayoutConditions]=jeremyBass #https://github.com/fbrnc/Aoe_LayoutConditions.git
[Aoe_AsyncCache]=jeremyBass #https://github.com/fbrnc/Aoe_AsyncCache.git
[Aoe_ApiLog]=jeremyBass #https://github.com/fbrnc/Aoe_ApiLog.git
#[mage-enhanced-admin-grids]=mage-eag
)
cd /srv/www/mage/
install_repolist $gitRepos 0 "wget http://$url"
unset gitRepos #unset and re-declare to clear associative arrays
declare -A gitRepos
cd /srv/www/mage/
echo "importing WSU favicon"
wget -q http://images.dev.edu/favicon.ico -O favicon.ico
#run actions that are hard to do direct sql quries on
php /srv/www/scripts/mage/install-post.php
echo
echo "doing the first index"
echo
cd shell && php -f indexer.php reindexall
mysql -u root -pblank $dbname -e "DELETE FROM $dbname.adminnotification_inbox;" | echo -e "\n >> Removed admin notifications ..."
# Enable developer mode
#if [ $MAG_DEVELOPER_MODE == 1 ]; then
# sed -i -e '/Mage::run/i\
#Mage::setIsDeveloperMode(true);
#' -e '1,$s//Mage::run/' $WWW_PATH/index.php
#fi
echo
echo "Finished installing Magento"
echo
fi
install-post.php Ce fichier se produit après que le fichier install-mage.sh a terminé l'installation Magento. Tous les modules ont été téléchargés et ce que nous avons besoin est d'avoir eu toutes les tables de le module installé. IE: les installations SQL pour les modules aurait dû être RAN maintenant
<?php
//just as a guide, no real purpose
echo getcwd() . " (working from)\n";
//set up the store instance
require_once "app/Mage.php";
umask(0);
Mage::app();
Mage::app()->getTranslator()->init('frontend');
Mage::getSingleton('core/session', array('name' => 'frontend'));
Mage::registry('isSecureArea'); // acting is if we are in the admin
Mage::app('admin')->setUseSessionInUrl(false);
Mage::getConfig()->init();
/**
* Get the resource model
*/
$resource = Mage::getSingleton('core/resource');
/**
* Retrieve the read connection
*/
$readConnection = $resource->getConnection('core_read');
/**
* Retrieve the write connection
*/
$writeConnection = $resource->getConnection('core_write');
// switch off error reporting
error_reporting ( E_ALL & ~ E_NOTICE );
$changeData = new Mage_Core_Model_Config();
echo "applying default store settings\n";
//pattern
//\((.*?), '(.*?)', (.*?), '(.*?)', '?(.*?)'?\),
//$changeData->saveConfig('$4', "$5", 'default', 0);
echo " - applying design settings\n";
$changeData->saveConfig('design/package/name', "wsu_base", 'default', 0);
$changeData->saveConfig('design/theme/template', "default", 'default', 0);
$changeData->saveConfig('design/theme/skin', "default", 'default', 0);
$changeData->saveConfig('design/theme/layout', "default", 'default', 0);
$changeData->saveConfig('design/theme/default', "default", 'default', 0);
$changeData->saveConfig('design/theme/locale', "NULL", 'default', 0);
function make_store($categoryName,$site,$store,$view){
//#adding a root cat for the new store we will create
// Create category object
$category = Mage::getModel('catalog/category');
$category->setStoreId(0); // No store is assigned to this category
$rootCategory['name'] = $categoryName;
$rootCategory['path'] = "1"; // this is the catgeory path - 1 for root category
$rootCategory['display_mode'] = "PRODUCTS";
$rootCategory['is_active'] = 1;
$category->addData($rootCategory);
$rootCategoryId=0;
try {
$category->save();
$rootCategoryId = $category->getId();
}
catch (Exception $e){
echo $e->getMessage();
}
if($rootCategoryId>0){
//#addWebsite
/** @var $website Mage_Core_Model_Website */
$website = Mage::getModel('core/website');
$website->setCode($site['code'])
->setName($site['name'])
->save();
//#addStoreGroup
/** @var $storeGroup Mage_Core_Model_Store_Group */
$storeGroup = Mage::getModel('core/store_group');
$storeGroup->setWebsiteId($website->getId())
->setName($store['name'])
->setRootCategoryId($rootCategoryId)
->save();
//#addStore
/** @var $store Mage_Core_Model_Store */
$store = Mage::getModel('core/store');
$store->setCode($view['code'])
->setWebsiteId($storeGroup->getWebsiteId())
->setGroupId($storeGroup->getId())
->setName($view['name'])
->setIsActive(1)
->save();
}
return $rootCategoryId;
}
echo "Applying the default multi-store setup\n";
$installed_stores = array();
$installed_stores['studentstore'] = make_store("Student store root",
array('code'=>'studentstore','name'=>'Student store'),
array('name'=>'Student Store'),
array('code'=>'studentstore','name'=>'base default veiw')
);
$installed_stores['teststore'] = make_store("Test store root",
array('code'=>'teststore','name'=>'Test store'),
array('name'=>'Test Store'),
array('code'=>'teststore','name'=>'base default veiw')
);
// let us refresh the cache
try {
$allTypes = Mage::app()->useCache();
foreach($allTypes as $type => $blah) {
Mage::app()->getCacheInstance()->cleanType($type);
}
} catch (Exception $e) {
// do something
error_log($e->getMessage());
}
$types = Mage::app()->getCacheInstance()->getTypes();
try {
echo "Cleaning data cache... \n";
flush();
foreach ($types as $type => $data) {
echo "Removing $type ... ";
echo Mage::app()->getCacheInstance()->clean($data["tags"]) ? "[OK]" : "[ERROR]";
echo "\n";
}
} catch (exception $e) {
die("[ERROR:" . $e->getMessage() . "]");
}
echo "\n";
try {
echo "Cleaning stored cache... ";
flush();
echo Mage::app()->getCacheInstance()->clean() ? "[OK]" : "[ERROR]";
echo "\n\n";
} catch (exception $e) {
die("[ERROR:" . $e->getMessage() . "]");
}
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
echo "Test modules";
if(isset($modulesArray['Aoe_AsyncCache'])) {
echo "AsyncCache exists.";
$tableName = $resource->getTableName('asynccache');
/**
* if prefix was 'mage_' then the below statement
* would print out mage_catalog_product_entity
*/
echo "known as ".$tableName;
} else {
echo "AsyncCachedoesn't exist.";
}
install-Invoke-app.php
<?php
//just as a guide, no real purpose
echo getcwd() . " (working from)\n";
//set up the store instance
require_once "app/Mage.php";
umask(0);
Mage::app();
Mage::app()->getTranslator()->init('frontend');
Mage::getSingleton('core/session', array('name' => 'frontend'));
Mage::registry('isSecureArea'); // acting is if we are in the admin
Mage::app('admin')->setUseSessionInUrl(false);
Mage::getConfig()->init();
// switch off error reporting
error_reporting ( E_ALL & ~ E_NOTICE );
// let us refresh the cache
try {
$allTypes = Mage::app()->useCache();
foreach($allTypes as $type => $blah) {
Mage::app()->getCacheInstance()->cleanType($type);
}
} catch (Exception $e) {
// do something
error_log($e->getMessage());
}
$types = Mage::app()->getCacheInstance()->getTypes();
try {
echo "Cleaning data cache... \n";
flush();
foreach ($types as $type => $data) {
echo "Removing $type ... ";
echo Mage::app()->getCacheInstance()->clean($data["tags"]) ? "[OK]" : "[ERROR]";
echo "\n";
}
} catch (exception $e) {
die("[ERROR:" . $e->getMessage() . "]");
}
echo "\n";
try {
echo "Cleaning stored cache... ";
flush();
echo Mage::app()->getCacheInstance()->clean() ? "[OK]" : "[ERROR]";
echo "\n\n";
} catch (exception $e) {
die("[ERROR:" . $e->getMessage() . "]");
}
echo "finish invoking the mage app.";
//time to login as admin
Mage::app('admin')->setUseSessionInUrl(false);
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
// supply username
$user = Mage::getModel('admin/user')->loadByUsername('admin'); // user your admin username
if (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
Mage::getSingleton('adminhtml/url')->renewSecretUrls();
}
$session = Mage::getSingleton('admin/session');
$session->setIsFirstVisit(true);
$session->setUser($user);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
Mage::dispatchEvent('admin_session_user_login_success',array('user'=>$user));
if ($session->isLoggedIn()) { echo "Logged in \n"; } else{ echo "Not Logged \n"; }
La solution
Réponse
Il se trouve que juste de vider le cache et de faire un wget, ou connectez-vous un utilisateur dans un programme, ou même les deux ne suffit pas pour déclencher le code pour installer un module.
est ce qui fonctionne.
rm -rf var/cache/*
php "/srv/www/mage/index.php"
Où /mage
est le dossier racine de magasin, je juste besoin d'exécuter le fichier index.php
puis il a travaillé. Je ne peux pas dire pourquoi il ne serait pas sur wget
, ou pourquoi appeler MAGE:app()
et toutes les combinaisons ne marchait pas, mais le dossier de compensation de cache et d'appeler le fichier est le ticket pour la reconstruction de manière stable le cache de la ligne de commande.
L'espoir cela permet d'économiser un peu de temps quelqu'un. Vive
Autres conseils
Je ne sais pas si je suis bien votre question, mais si vous voulez script d'installation de déclenchement w / o ouvrir le site dans votre navigateur pourquoi ne pas simplement créer le script shell qui vient wget
la page d'accueil de votre installation Magento?
Vous pouvez utiliser le script suivant pour effacer le cache de la ligne de commande après avoir appliqué toutes les mises à jour à travers git. Après cela, vous pouvez utiliser wget pour obtenir la page d'accueil de votre site pour reconstruire le cache et exécuter toutes les modifications de la base de données.
(code de http://www.yameveo.com/development/php/flush-every-magento-cache-from-the-command-line ):
<?php
date_default_timezone_set("Europe/Madrid");
echo "Start Cleaning all caches at ... " . date("Y-m-d H:i:s") . "\n\n";
ini_set("display_errors", 1);
require '../app/Mage.php';
Mage::app('admin')->setUseSessionInUrl(false);
Mage::getConfig()->init();
$types = Mage::app()->getCacheInstance()->getTypes();
try {
echo "Cleaning data cache... \n";
flush();
foreach ($types as $type => $data) {
echo "Removing $type ... ";
echo Mage::app()->getCacheInstance()->clean($data["tags"]) ? "[OK]" : "[ERROR]";
echo "\n";
}
} catch (exception $e) {
die("[ERROR:" . $e->getMessage() . "]");
}
echo "\n";
try {
echo "Cleaning stored cache... ";
flush();
echo Mage::app()->getCacheInstance()->clean() ? "[OK]" : "[ERROR]";
echo "\n\n";
} catch (exception $e) {
die("[ERROR:" . $e->getMessage() . "]");
}