web-dev-qa-db-ja.com

コンポーネントの更新:DBエラーファイル関数はエラーを返しませんでした

私はコンポーネントに取り組んでいますが、更新するとエラーが発生することに気付きました(「コンポーネントの更新:DBエラーファイル関数がエラーを返しませんでした」のようなもので、正確ではありませんが閉じます)。

これは、拡張テーブルの行(拡張テーブルのみ)が原因であることに気づきました。それらを削除すると修正されます。しかし、それは基本的に、ファイル/データ(構成以外)を削除せずにコンポーネントを「アンインストール」するため、プリフライトスクリプトを実行して更新時に実行するオプションはありません。

コンポーネントの性質上、その横にインストールするライブラリがあるので、F0Fのインストーラースクリプトツールを使用しました(ライブラリをインストールするオプションがないため、それを拡張しました)。 F0FにはbugfixDBFunctionReturnedNoError()という関数があり、上記の手法を使用してエラーを修正します。ただし、アンインストールされて何か残っている場合に備えて、インストール時にそれを実行するようになっています。しかし、私は更新時にそれを行う必要があります。

インストーラースクリプトにいくつかの変更を加えて、更新時にも実行できるようにしました。しかし、それはこの問題を回避する方法ではありません、これについて何か考えはありますか?

2
Jordan Ramstad

コンポーネントを作成するときに、少なくとも1つの空の更新SQLファイルが必要であるか、失敗すると問題が解決しました。インストーラがフォルダをスキップしないことを確認するための一般的なindex.htmlファイルだけではありません。

通常、ファイルはsql/updates/mysql/VERSION.sqlバージョンを実際に必要なバージョンに置き換えます。これはバグであると確信しています。更新時にsqlファイルは必要ありませんが、そうであるか、それとも他に何か不足している場合でも、緊急ではありません。

2
Jordan Ramstad

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 [〜#〜] に投稿されています。

1
Valentin Despa