将 pimcore 从服务器移动到本地时出现致命错误
Fatal error when moving pimcore from a server to local
我将所有 pimcore 文件和数据库从服务器移至我的本地主机,并在 website/var/config/system.xml
中进行了必要的更改。
管理员正在工作,但前端显示错误:
Fatal error: Call to a member function getFielddefinitions() on a non-object in /var/www/html/pimcore/pimcore/models/Object/Localizedfield/Resource.php on line 179
这行代码产生错误:
$this->model->getClass()->getFielddefinition("localizedfields")->getFielddefinitions()
系统要求和文件权限正确。
出于测试目的,我在本地系统上安装了一个新的 pimcore 项目,它运行良好。
我可以对我的 数据库 进行任何更改吗?
如何在本地成功运行我的项目?
您可以:
在 config.xml 中设置 1 - 这应该显示错误
如果没有帮助,请检查 apache and/or php 错误日志。
我们需要查看实际错误(正如 Vinod 已经指出的那样)。
不过我可以推测:
数据库凭据(又名数据库用户名)是否相同?
如果不是,您可能需要从数据库转储中删除 SECURITY DEFINER。
请参阅:Remove DEFINER clause from MySQL Dumps 了解如何操作的提示。
另一个错误来源可能是缓存。您使用的是默认的基于文件的 Pimcore 缓存吗?
如果是这种情况,请尝试从 website/var/cache 和 website/var/tmp
中删除所有文件
告诉我们结果如何。
当使用 class.
已经存在对象时会发生错误
解决方案
- 以管理员身份登录到后端。
- 转到
Settings > Object > Classes
- 对于左侧树中的每个 classes,单击它们,然后点击右下角的 保存。 (如果无法保存,只需点击按钮 添加新的 class 来创建一个新的 class )
现在尝试加载前端。它会起作用。
Pimcore 使用数据库视图来存储对象数据。导出数据库时,视图定义中也会有SECURITY DEFINER。
/*!50013 DEFINER=`prod-user`@`%` SQL SECURITY DEFINER */
- 选项:Vinot VT 解决方案应该有效
您可以使用 运行 命令获得相同的结果:
php pimcore/cli/console.php deployment:classes-rebuild
选项:在您的本地环境中使用相同的数据库用户名'prod-user',如果您要大量导入产品数据库,这很有用
选项:在导入数据库之前将 DEFINER=prod-user
@%
替换为 DEFINER=local-user
@%
我将所有 pimcore 文件和数据库从服务器移至我的本地主机,并在 website/var/config/system.xml
中进行了必要的更改。
管理员正在工作,但前端显示错误:
Fatal error: Call to a member function getFielddefinitions() on a non-object in /var/www/html/pimcore/pimcore/models/Object/Localizedfield/Resource.php on line 179
这行代码产生错误:
$this->model->getClass()->getFielddefinition("localizedfields")->getFielddefinitions()
系统要求和文件权限正确。
出于测试目的,我在本地系统上安装了一个新的 pimcore 项目,它运行良好。
我可以对我的 数据库 进行任何更改吗? 如何在本地成功运行我的项目?
您可以:
在 config.xml 中设置
1 - 这应该显示错误如果没有帮助,请检查 apache and/or php 错误日志。
我们需要查看实际错误(正如 Vinod 已经指出的那样)。
不过我可以推测:
数据库凭据(又名数据库用户名)是否相同? 如果不是,您可能需要从数据库转储中删除 SECURITY DEFINER。 请参阅:Remove DEFINER clause from MySQL Dumps 了解如何操作的提示。
另一个错误来源可能是缓存。您使用的是默认的基于文件的 Pimcore 缓存吗? 如果是这种情况,请尝试从 website/var/cache 和 website/var/tmp
中删除所有文件告诉我们结果如何。
当使用 class.
已经存在对象时会发生错误解决方案
- 以管理员身份登录到后端。
- 转到
Settings > Object > Classes
- 对于左侧树中的每个 classes,单击它们,然后点击右下角的 保存。 (如果无法保存,只需点击按钮 添加新的 class 来创建一个新的 class )
现在尝试加载前端。它会起作用。
Pimcore 使用数据库视图来存储对象数据。导出数据库时,视图定义中也会有SECURITY DEFINER。
/*!50013 DEFINER=`prod-user`@`%` SQL SECURITY DEFINER */
- 选项:Vinot VT 解决方案应该有效 您可以使用 运行 命令获得相同的结果:
php pimcore/cli/console.php deployment:classes-rebuild
选项:在您的本地环境中使用相同的数据库用户名'prod-user',如果您要大量导入产品数据库,这很有用
选项:在导入数据库之前将 DEFINER=
prod-user
@%
替换为 DEFINER=local-user
@%