モジュールをプログラム的にインストールします
-
16-10-2019 - |
質問
データベースの変更が発生するようにモジュールをインストールする必要があります。テストサーバーのプロビジョニングに使用しているbashスクリプトがあるため、管理タイプのアプローチのロギングにインストールすることはできません。 Git Repoのモジュールをクローンすると、それらの一部がインストールされていないため、テストストアを追加するPHPスクリプトに強制的にインストールする必要があります。私はあらゆる種類のクラスを調べました、そして私が見つけた最高のものは
ismoduleoutputEnabled()
しかし、それはそれをカットするつもりはありません。強力なインストールを行う方法に関するアイデア?
問題の可能な識別
キャッシュを簡単にクリアして呼び出すのは Mage::app()
また、管理者ユーザーをログインしようとすると、インストールのモジュールのトリガーに失敗します。ただし、キャッシュを手でクリアすると、 /adminログイン画面に初めて行く直前に、予想通りにインストールします。まだページを取得している(wget
)キャッシュをクリアする前に、モジュールのインストールにも失敗します。
更新1
ここでいくつかの強制を試みましたが、何が起こっているのかわかりません...拡張機能は、新鮮なインストールの後まで待ってフォルダーにファイルを配置するだけですが、事前にクローンでファイルを配置するだけです。には見えません core_resource
モジュールのテーブルまたはテーブル。ポストインストールスクリプトのサンプルテストはです
$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.";
}
走ったとき、私は見えます AsyncCache exists. known as 'asynccache'
しかし、それはデータベースにありません。そのテーブルは取り付けられていません。繰り返しますが、モジュールは待っていれば正常にインストールされます...しかし、奇妙なことに、このgitクローンを実行すると、インストールされません。何が起こっているのか本当にわかりません。
更新2
データベースに結び付けられたモジュールは、インストールされていないようです。何が起こっているのかについての背景。私は使用しています vagrant
そして、それはのURLにあります http://local.mage.dev URLとして。 Provision.shスクリプトを使用すると、SSHからMagentoをインストールしてもらいます。私は失速します。しかし、問題の素晴らしい例は、私がとても簡単なとき、
./mage config-set preferred_state alpha
./mage clear-cache
./mage sync
./mage download community BL_CustomGrid
./mage install community BL_CustomGrid
テーブルは取り付けられていません。理由がわかりません。 Magentoがインストールされています。最初のログインを待つ場合、接続を使用してインストールを行うことができます。コマンドラインに、BL_Customegridが正常にインストールされていることに気づきますが、テーブルはありません。
update3
私はすべての提案を1つに組み合わせようとしました。各Githubクローンの後にMageアプリが呼び出され、キャッシュがクリアされます。その後、ログインする前に最後にキャッシュをクリアします。テーブルをインストールすることができません。私はそれが浮浪者と何か関係があるのではないかと思うが、マゼントがインストールする可能性は低いようだ。しかし、私がしたことの証拠、ここにあります 魔術師を呼び出してキャッシュをクリアする以外に何もしていないPHPスクリプトを呼び出すことに関するサブ質問。
update4
重要な注意点:
Magentoのインストール後にインストールを行った場合に再確認したテストを行っただけではありません。通常のログイン、ファイルのアップロード、クリアキャッシュ、ログアウト、ログインログイン、モジュールがインストールされます。しかし、管理者ユーザーのプログラム的にログインすると、ユーザーが泡立っていることに反映し、キャッシュをクリアしても、それでも失敗します。
目標は、それを見つける必要があります install('module_name')
または、そのようなもの、または2つ、ユーザーがキャッシュをクリアしてログアウトしたときに100%を実行できるようになります。
モジュールのインストール方法のプログラムレプリケーション(ログアウト、クリアキャッシュなど)が失敗します
再生されたスクリプト
Install-Invoke-App.phpを呼び出すスクリプトは完全なコンテキストがあります。ここにfunction.shが呼び出され、メイジの呼び出しが行われていることがわかります。
provision.shこれが呼ばれるものです vagrant
私のテストベッドを構成し、完全なMagentoインストールをプログラムで設置します
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これは、このバッシュスクリプトの関数の一部です。これは、このサーバーインストールのセットで使用されるものだけです。これが私たちが呼んでいる場所であることに注意してください php "/srv/www/scripts/mage/install-invoke-app.php"
これは、魔術師を呼び出してモジュールをインストールする必要があるものです。これで、拡張機能がプログラム的にインストールされるようになりました。 これは起こっていません。
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これは、Provision.shスクリプトがサーバーのすべての基本をインストールした後に呼び出されます。すでに持っているはずです nginx
と php5
/php-fpm
必要な残りのすべてのモジュール。
#!/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このファイルは、install-mage.shファイルがMagentoインストールを完了した後に発生します。すべてのモジュールがダウンロードされています 必要なのは、すべてのモジュールのテーブルをインストールすることです。 IE:モジュールのSQLインストールは今までに実行されるはずです
<?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.";
}
インストール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"; }
解決
答え
キャッシュをクリアしてWGETを実行するか、プログラムでユーザーをログインするだけでも、モジュールをインストールするコードをトリガーするには不十分であることがわかりました。
これが機能するものです。
rm -rf var/cache/*
php "/srv/www/mage/index.php"
どこ /mage
ストアルートフォルダーですか、私はただ実行する必要がありました index.php
ファイルしてから機能しました。なぜそれが続かないのかは言えません wget
, 、またはなぜ呼び出すか MAGE:app()
すべての組み合わせは機能しませんでしたが、キャッシュフォルダーをクリアしてファイルを呼び出すことは、コマンドラインからキャッシュを安定に再構築するためのチケットです。
これが誰かに時間を節約することを願っています。乾杯
他のヒント
私があなたの質問を正しく受けたかどうかはわかりませんが、ブラウザでウェブサイトを開くとセットアップスクリプトをトリガーしたい場合は、なぜシェルスクリプトを作成しないのですか wget
Magentoのインストールのホームページ?
次のPHPスクリプトを使用して、gitを通じてすべての更新を適用した後、コマンドラインからキャッシュをクリアできます。この後、WGETを使用してサイトのホームページを取得してキャッシュを再構築し、すべてのデータベースの変更を実行できます。
(からのコード 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() . "]");
}