1

跨 AWS 上的 7 个服务器的 Magento 4 HTTPD 1 Memcached 1 Main DB 1 Media DB

上传图像工作,在管理员中加载缩略图,然后在保存时导致错误:SQLSTATE[42S02]: Base table or view not found: 1146 Table 'magento.core_file_storage' doesn't exist

我知道桌子在那里。我能看到它。core_file_storage ~471,510 InnoDB utf8_general_ci 2.1 GiB

有任何想法吗?有什么想法可以反弹吗?

- -编辑

SQL错误不再出现,保存成功但图片为空。

---使用 local.xml 调用第二个数据库:

    <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 回答
0

如果您将使用文件系统存储,请确保您的 /media 目录设置为 777 并运行chmod -R o+w media. 如果错误仍然存​​在,解决问题的最干净的方法如下:

  1. 转到系统>配置>高级>系统并将“媒体存储配置”切换到“数据库”。单击同步。等待同步过程完成或超时(可能取决于您的设置)。表“core_directory_storage”已创建并填满。单击 SAVE CONFIG(不确定此步骤是否必要,但无论如何都要执行)。
  2. 如果同步过程超时,您可能会在 Magento Admin 中看到有关重大错误的通知“同步媒体存储时发生错误。”。没关系,因为在下一步中,我们将恢复到基于文件的媒体存储。
  3. 在第 1 步中调整的相同设置中,切换回“文件系统”并再次单击“同步”。单击 SAVE CONFIG(不确定此步骤是否必要,但无论如何都要执行)。
  4. 现在转到您的数据库管理器(例如 PHPMyAdmin)并使用 DELETE FROM 删除最近创建的表中的所有行core_directory_storage

您的表格丢失错误现在消失了。

于 2013-02-02T10:18:20.480 回答