【问题标题】:CakePHP database table, missing datasource defaultCakePHP 数据库表,默认缺少数据源
【发布时间】:2013-02-05 20:07:01
【问题描述】:

我发现this 类似的问题,但我的问题不同。

我将我的 CakePHP 2.2 应用程序移到了另一台服务器上。迁移前没有问题。迁移后大多数事情都可以正常工作。我可以访问我的大多数数据库表等。但是当我尝试访问我的一个表时,我收到了这个错误:

"Error 500: Table stats for model Stat was not found in datasource default."

为了解决这个问题,我检查了这个文件夹: "/app/tmp/cache/models"

在该文件夹中,我的每个表都有一个文件

  • myapp_cake_model_default_mydatabase_table1
  • myapp_cake_model_default_mydatabase_table2
  • myapp_cake_model_default_mydatabase_table3 等等。

但是没有 stats 表的文件。这可能是问题吗?或者我该如何解决?

(“/app/tmp/cache/models”文件夹的权限为 755)

在 Database.php 我有这个:

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'myuser',
    'password' => 'mypass',
    'database' => 'mydatabase',
    'prefix' => '',
    'encoding' => 'utf8',
);

编辑:
正如我在 thaJeztah 的回答 cmets 中指出的那样,在删除 app/tmp/cache/persistent 中的所有文件后,问题已解决。 CakePHP 创建了新的模型缓存文件并且它工作了。一年后,我发现了真正的问题。问题是设置蛋糕模型文件的明确持续时间。我将清除缓存设置为 +999 天,因此不会重新生成模型文件。在进行模型更改时,您可以为模型缓存清除设置较低的值:

Cache::config('_cake_model_', array(
    'engine' => "File",
    'prefix' => "myapp_". 'cake_model_',
    'path' => CACHE . 'models' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => "+999 days"
));

【问题讨论】:

  • 发布你的数据源配置(密码可以匿名)和DESCRIBE stats查询的输出。
  • @trante 没有缓存文件的事实让我觉得你可能忘记迁移表了。
  • @Oldskool 编辑的问题。
  • 从 app/tmp/cache/persistent 和 /app/tmp/cache/models 中删除所有文件,然后启用调试。您的 SQL 日志/调试应该显示 CakePhp 用来检测表是否存在于数据库中的查询。您还可以检查 Cake 写入 tmp 文件是否没有问题。
  • 另一个想法:APC 是否有可能安装在新服务器上?如果安装了 APC,CakePHP 默认使用 APC 而不是文件缓存。在这种情况下,请确保您设置了唯一的缓存前缀,否则可能会使用同一服务器上另一个 CakePHP 网站的缓存

标签: database cakephp model cakephp-2.0


【解决方案1】:

您是否检查过您的数据库,例如在 phpMyAdmin 或 MySql 工作台中?该表是否存在于数据库中?

错误消息表明无法使用默认连接访问该表。有可能该表确实丢失了,或者您用来连接数据库的用户没有该表的正确权限。

如果您从另一台服务器迁移数据库,您在导入时是否收到错误消息?如果您没有创建包含在事务中的转储,则可能只是部分导入了数据库转储。

[update]这个建议解决了问题;

从app/tmp/cache/persistent 和/app/tmp/cache/models 中删除所有文件,然后启用调试。您的 SQL 日志/调试应该显示 CakePhp 用来检测表是否存在于数据库中的查询。您还可以检查 Cake 写入 tmp 文件是否没有问题

【讨论】:

  • 我确定该表存在于新服务器中。我没有为表权限做任何事情。如果我没有权限,我不会到达其他桌子。
  • 我没有收到任何错误。我从新服务器中删除了统计表。从旧服务器转储 id 并再次导入新服务器。问题依然存在。
  • 在尝试了您对 cme​​ts 的想法(删除“app/tmp/cache/persistent”文件)后,Cake 在持久目录中创建了正确的模型文件,一切正常。谢谢。
  • 很高兴我能帮上忙。祝你的项目好运!
  • 从 app/tmp/cache/persistent 和 /app/tmp/cache/models 中删除所有文件,谢谢。删除缓存解决了我的问题
【解决方案2】:

如果这对 2020 年的任何人都有帮助。 即使拥有模型的完全权限,我也遇到了这个问题。我尝试像@theJeztah 建议的那样清除缓存/持久性,但问题仍然存在。最终起作用的是在app/core file 中将Configure::write('debug', 0) 切换为Configure::write('debug', 2)。大概在调试时它会更好地清除缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2013-02-09
    • 1970-01-01
    • 2014-03-03
    • 2019-03-26
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多