web-dev-qa-db-ja.com

Joomla 3.5以降を手動で最新バージョンに更新する

Joomlaのインストール、バージョン3.5以降がありますが、何を試しても更新できません。 Joomla Updateコンポーネントを使用しようとしました。パッケージをアップロードしようとしましたが、機能しません。

次に、ルートディレクトリでパッケージを抽出しようとしたところ、サイトが壊れました。

手動で更新するにはどうすればよいですか?

3

Michael Babkerが、手動による更新後のスクリプトを https://Gist.github.com/mbabker/d7bfb4e1e2fbc6b7815a733607f89281 で提供しています。これにより、ファイルシステムの更新後に通常実行される手順が実行されます。

このスクリプトは、更新パッケージをサイトから手動で抽出した後に実行されるように設計されています。

いつものように、このようなメジャーアップデートを試みる前に、Webサイトのバックアップを実行する必要があります。

以下は現在のコードのコピーですが、リンクされたページは将来更新される可能性があるため、必ず最新バージョンを使用していることを確認してください。


postupdate.phpファイル(2019年9月15日現在):

<?php
/**
 * @package    Joomla.Administrator
 *
 * @copyright  Copyright (C) 2016 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */
/**
 * Define the application's minimum supported PHP version as a constant so it can be referenced within the application.
 */
define('JOOMLA_MINIMUM_PHP', '5.3.10');
if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<'))
{
    die('Your Host needs to use PHP ' . JOOMLA_MINIMUM_PHP . ' or higher to run this version of Joomla!');
}
/**
 * Constant that is checked in included files to prevent direct access.
 * define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
 */
define('_JEXEC', 1);
// Load the administrator application's path constants
if (file_exists(__DIR__ . '/defines.php'))
{
    include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_BASE . '/includes/helper.php';
// Account for moved JToolbarHelper class in 3.9
if (file_exists(JPATH_BASE . '/includes/toolbar.php'))
{
    require_once JPATH_BASE . '/includes/toolbar.php';
}
else
{
    require_once JPATH_BASE . '/includes/subtoolbar.php';
}
// Boot JApplicationAdministrator so the application references in the factory resolve correctly.
JFactory::getApplication('administrator');
// Set the component path (un)constants
define('JPATH_COMPONENT', JPATH_ADMINISTRATOR . '/components/com_joomlaupdate');
define('JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR . '/components/com_joomlaupdate');
define('JPATH_COMPONENT_SITE', JPATH_SITE . '/components/com_joomlaupdate');
// Load the update component's model to run the cleanup methods
JModelLegacy::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/models', 'JoomlaupdateModel');
/** @var JoomlaupdateModelDefault $model */
$model = JModelLegacy::getInstance('default', 'JoomlaupdateModel');
// Make sure we got the model
if (!($model instanceof JoomlaupdateModelDefault))
{
    echo 'Could not load update component model, please check the logs for additional details.' . PHP_EOL;
    exit(1);
}
// Load up the logger
JLog::addLogger(
    array(
        'format'    => '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}',
        'text_file' => 'joomla_update.php',
    ),
    JLog::INFO,
    array('Update', 'databasequery', 'jerror')
);
JLog::add('Starting manual update using postupdate', JLog::INFO, 'Update');
// Load the Joomla library and update component language files
JFactory::getLanguage()->load('lib_joomla');
JFactory::getLanguage()->load('com_joomlaupdate');
JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE'), JLog::INFO, 'Update');
// Finalize the update
if ($model->finaliseUpgrade() === false)
{
    echo 'Failed to finalize the upgrade, please check the logs for additional details.' . PHP_EOL;
    exit(1);
}
JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_CLEANUP'), JLog::INFO, 'Update');
// Cleanup after the update
$model->cleanUp();
JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE', JVERSION), JLog::INFO, 'Update');
JLog::add('Finished manual update using postupdate', JLog::INFO, 'Update');
echo 'Update to ' . JVERSION . ' completed successfully.' . PHP_EOL;
3
Neil Robertson

周りの多くの投稿では、Joomla 3.5以降を手動で更新するべきではないと述べています。そして、これが良いアドバイスである理由はいくつかあります。

ただし、手動でJoomla 3.5+を最新バージョン(現在は3.8.8)に更新することができます

1.最初にバックアップ

まず、現在のサイトの適切な作業用バックアップが必要です。 物事がうまくいかない可能性があります。

2.管理者にログインします

サイトのアドミニストレーターでアクティブなセッションを維持することは重要です。それが機能している間は、ステップ4が機能しない可能性があります。

3.ファイルを抽出します

Joomla Updateコンポーネント(Components > Joomla Update)または downloads.joomla.org から最新のJoomlaアップグレードパッケージをダウンロードできます。

librariesディレクトリの名前をlibraries-oldに変更します。

ダウンロードしたパッケージをサイトのルートディレクトリに配置します。エキス。

フロントエンドを開いてエラーまたは空白のページが表示された場合は、librariesディレクトリの名前をlibraries-brokenに変更して、librariesディレクトリを直接コピーしてみてください。最新バージョンフルパッケージから。

4.データベースを修正する

これまでのところうまくいっていれば、管理者は壊れているはずです。そうでなければ、ばんざーい! Extensions > Manage > Databaseに移動し、Fixボタンをクリックします。

管理者が壊れている場合、サイトの管理者URLの後に次のリンクをコピーします。

[your site]/administrator/index.php?option=com_installer&view=database&task=database.fix

このリンクをクリックすると、データベースが自動的に修正され、管理者が再び使用できるようになります。もう一度[Fix]をクリックします。

これで、サイトに最新のJoomlaバージョンがインストールされているはずです。それでも問題が解決しない場合は、サードパーティの拡張機能などを更新する必要があるかもしれません。

3