1

AWS 上の 7 台のサーバーにまたがる Magento 4 HTTPD 1 Memcached 1 メイン DB 1 メディア DB

画像のアップロードが機能し、管理者にサムネイルが読み込まれ、保存するとエラーが発生します: SQLSTATE[42S02]: ベース テーブルまたはビューが見つかりません: 1146 テーブル 'magento.core_file_storage' が存在しません

私はテーブルがそこにあることを知っています。私はそれを見ることができます。core_file_storage ~471,510 InnoDB utf8_general_ci 2.1 GiB

何か案は?跳ね回るアイデアはありますか?

- -編集

SQL エラーは表示されなくなり、正常に保存されますが、画像は空です。

--- local.xml を使用して 2 番目の DB を呼び出す:

    <media_storage>
        <connection>
            <host><![CDATA[127.0.0.1]]></host>
            <username><![CDATA[root]]></username>
            <password><![CDATA[password]]></password>
            <dbname><![CDATA[magento]]></dbname>
            <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
            <model><![CDATA[mysql4]]></model>
            <type><![CDATA[pdo_mysql]]></type>
            <pdoType><![CDATA[]]></pdoType>
            <active>1</active>
        </connection>
    </media_storage>
4

2 に答える 2

2

私は同じ問題を抱えていて、(何らかの方法で)メインデータベース(およびメディアデータベース)に作成されたテーブルを取得しました。これにより、実際の問題 (Magento が間違ったデータベースでこれらのテーブルを探していた理由) が隠されましたが、すべてが機能しているように見えました。それまで ...

一度に複数の画像をアップロードしようとすると、最初の画像のみが適切に保存されました。また、別の製品に同じファイル名を使用しようとすると、これらも機能しません。最終的に、デバッグを行うことにしました。その結果、ファイルがテーブルから再ロードされ、setData($row) を呼び出して現在のインスタンスに設定されていることがわかりました。これを行うと、Magento は接続名 (データ配列にも保存されます) をクリアし、あなたの場合、以前は「media_storage」と呼ばれていました。

このモデルを保存しようとすると、間違った接続が使用されており、それらのテーブルが存在しないため、失敗します。回避策を実行してもそれらが存在する場合、機能は明らかに存在せず、サムネイルが欠落したままになります。メディア データベースを確認すると、各ファイルの行が表示されますが、最初のファイルだけが「tmp」から名前が変更されています。

私の解決策 (今のところ) は、次のメソッドを Mage/Core/Model/File/Storage/Database/Abstract.php に追加することです。これにより、setData の後で接続名がリセットされることが保証されます (入力されている場合)。これを簡単にテストしただけですが、これまでのところうまくいったようで、私が経験していた問題は両方とも解決されています。

/**
 * Ensure that the connection name is retained if the set data is setting the entire row.
 */
public function setData($key, $value=null)
{
    $connectionName = $this->getConnectionName();
    parent::setData($key, $value);
    $this->setConnectionName($connectionName);
    return $this;
}
于 2013-05-03T23:02:25.403 に答える