当我在 AWS 中从本地 Homestead 更改为 prod 时,Laravel 引发 SQLite 错误

Posted

技术标签:

【中文标题】当我在 AWS 中从本地 Homestead 更改为 prod 时,Laravel 引发 SQLite 错误【英文标题】:Laravel Throws SQLite error when I change from local Homestead to prod in AWS 【发布时间】:2018-10-06 20:15:38 【问题描述】:

我创建了一个应用程序,它使用 Archon 库来创建和操作数据帧,here's 链接(顺便说一句,很棒的库!)。

应用程序将创建一个包含重复项的大型数组。我正在使用 Archon 的数据框功能来执行 groupBy 操作,以便获取数组中每个唯一条目的计数。

这个数组从几百个条目到几千个不等。

在本地,这很好用。我正在使用带有 VirtualBox 的 Vagrant - 我有一个 Homestead Box 在那里运行。它在 Ubuntu 64 位系统上运行。 我最近将我的应用程序部署到了一个弹性 beanstalk 实例,它在 64 位 Amazon Linux/2.6.6 上运行。

部署后,我收到了

的错误
SQLSTATE[HY000]: General error: 1 too many SQL variables

所以似乎出于某种原因,在更改系统后,客户端与 Archon 构建的 SQLite 驱动程序进行了不同的交互。我不知道为什么这会在本地工作,但在部署后却不行。

这是我正在使用的产生错误的代码:

$df = DataFrame::fromArray($batch_array);
$senders_emails = $df->query("SELECT a,sum(b) AS bFROM dataframe GROUP BY 1ORDER BY 2 DESC")->toArray();

有没有人足够了解 SQLite/Archon/Homestead 与 EB 来提供帮助? 将不胜感激!

【问题讨论】:

【参考方案1】:

您的$batch_array 数据过多。

这样考虑

$sendersEmails = [];
foreach (array_chunk($batch_array, 100) as $chunk) 
    $df = DataFrame::fromArray($chunk);
    $emails = $df->query("SELECT a,sum(b) AS bFROM dataframe GROUP BY 1ORDER BY 2 DESC")->toArray();
    $sendersEmails = array_merge($sendersEmails, $emails);

注意:这可能会导致内存溢出

要从根本上解决问题需要减少$batch_array的数据量

What is maximum query size for mysql?

【讨论】:

感谢您的回答 qskane 和您的功能。我知道这是由于数组的大小,但是为什么相同的数组在本地可以正常工作?这似乎与机器/环境设置有关? 是的,一般是环境差异造成的@ShaunPreston 你知道很多不同之处吗?希望了解幕后发生的事情...... 对不起,这个真的很难说清楚,现在是什么错误? @ShaunPreston

以上是关于当我在 AWS 中从本地 Homestead 更改为 prod 时,Laravel 引发 SQLite 错误的主要内容,如果未能解决你的问题,请参考以下文章

sh Laravel Homestead配置脚本,包括WP-CLI和AWS-CLI

如何在 AWS 中从 Java 生成签名

项目不会反映本地主机上的更改

Homestead 无法与 mac 同步数据

在 Flutter 中从 Notification Service Extension 更改 CFBundleVersion #66448

如何在 aws 中从我的 mac 设置和登录 ***?