私はコンポーネントに取り組んでいますが、更新するとエラーが発生することに気付きました(「コンポーネントの更新:DBエラーファイル関数がエラーを返しませんでした」のようなもので、正確ではありませんが閉じます)。
これは、拡張テーブルの行(拡張テーブルのみ)が原因であることに気づきました。それらを削除すると修正されます。しかし、それは基本的に、ファイル/データ(構成以外)を削除せずにコンポーネントを「アンインストール」するため、プリフライトスクリプトを実行して更新時に実行するオプションはありません。
コンポーネントの性質上、その横にインストールするライブラリがあるので、F0Fのインストーラースクリプトツールを使用しました(ライブラリをインストールするオプションがないため、それを拡張しました)。 F0FにはbugfixDBFunctionReturnedNoError()
という関数があり、上記の手法を使用してエラーを修正します。ただし、アンインストールされて何か残っている場合に備えて、インストール時にそれを実行するようになっています。しかし、私は更新時にそれを行う必要があります。
インストーラースクリプトにいくつかの変更を加えて、更新時にも実行できるようにしました。しかし、それはこの問題を回避する方法ではありません、これについて何か考えはありますか?
コンポーネントを作成するときに、少なくとも1つの空の更新SQLファイルが必要であるか、失敗すると問題が解決しました。インストーラがフォルダをスキップしないことを確認するための一般的なindex.htmlファイルだけではありません。
通常、ファイルはsql/updates/mysql/VERSION.sql
バージョンを実際に必要なバージョンに置き換えます。これはバグであると確信しています。更新時にsqlファイルは必要ありませんが、そうであるか、それとも他に何か不足している場合でも、緊急ではありません。
SQL更新を使用し、初めてエラーをインストールするときにコンポーネントをインストールしようとすると、テストシステムでこのエラーが頻繁に発生します(SQLに関係なく、マニフェストファイルからファイルが見つからないなど)。
Extension managerからインストールが失敗する可能性があるため、コンポーネントを手動でアンインストールしてこれを修正する方法のいくつかの手順を次に示します。
拡張機能のIDを見つけます(複数のエントリを見つけることもできます)
SELECT *
FROM `#__extensions`
WHERE `name` LIKE '%myextensionname%'
LIMIT 0 , 30
#__schemas
から拡張機能のエントリを削除します。ここで、extension_id
は以前に見つかったIDです。存在しない拡張子のエントリもすべて削除します。
拡張機能のアセットを削除します:
SELECT *
FROM `#__assets`
WHERE `name` LIKE '%myextensionname%'
LIMIT 0 , 30
メニューエントリを削除します:
SELECT *
FROM `#__menu`
WHERE `link` LIKE '%myextensionname%'
LIMIT 0 , 30
再インストールします。
注:最初は [〜#〜] so [〜#〜] に投稿されています。