Node.js Heroku不会使用我的Keyv和Sqlite数据库

Node.js Heroku不会使用我的Keyv和Sqlite数据库,node.js,database,sqlite,discord.js,Node.js,Database,Sqlite,Discord.js,我从sqlite创建了一个数据库,我用我的github将其上传到Heroku,但它只从数据库中获取数据,不进行更改。没有错误,只是不工作。当我在我的电脑上测试它时,它工作正常。我不知道为什么你只能获取数据而不能更改它。如果你能分享一个你是如何得到和设置的例子,我也许能帮你暂时让它运行起来 然而,我了解到: 为什么SQLite不适合在Heroku上运行? 磁盘备份存储 SQLite在内存中运行,并将其数据存储备份到磁盘上的文件中。虽然这种策略在开发中效果很好,但Heroku的Cedar堆栈有一个短

我从sqlite创建了一个数据库,我用我的github将其上传到Heroku,但它只从数据库中获取数据,不进行更改。没有错误,只是不工作。当我在我的电脑上测试它时,它工作正常。

我不知道为什么你只能获取数据而不能更改它。如果你能分享一个你是如何得到和设置的例子,我也许能帮你暂时让它运行起来

然而,我了解到:

为什么SQLite不适合在Heroku上运行? 磁盘备份存储 SQLite在内存中运行,并将其数据存储备份到磁盘上的文件中。虽然这种策略在开发中效果很好,但Heroku的Cedar堆栈有一个短暂的文件系统。您可以写入它,也可以读取它,但内容将定期清除。如果您在Heroku上使用SQLite,您将至少每24小时丢失一次整个数据库

即使Heroku的磁盘是持久性的,运行SQLite仍然不是一个好的选择。由于SQLite不是作为服务运行的,因此每个dyno将运行一个单独的运行副本。每个拷贝都需要自己的磁盘备份存储。这意味着为应用程序供电的每个dyno都会有一组不同的数据,因为磁盘不同步

您可以将应用程序配置为在Postgres上运行,而不是在Heroku上使用SQLite

然后我跟着。阅读说明是值得的,但使用说明的要点是:

本节:

  • “使用
    heroku addons
    命令确定您的应用程序是否已经配置了heroku Postgres”
  • 如果
    heroku-postgresql
    未出现在应用程序的加载项列表中,则可以使用以下CLI命令对其进行设置:
    heroku-addons:create heroku-postgresql:hobby-dev
    • 写作时,爱好层是免费的
  • 此命令将环境变量添加到名为
    数据库\u URL
    的项目中
  • 我正在使用。我安装了它的同伴。(我还卸载了我的
    sqlite
    东西。)

    我使用新添加的
    DATABASE\u URL
    环境变量连接到上面链接的
    keyv
    步骤:

    const Keyv=require('Keyv');
    常数键=
    process.env.NODE_env!==“生产”
    ? 新Keyv()
    :new Keyv(process.env.DATABASE\u URL);
    
    我还没有找到在本地开发/测试Postgre的最佳解决方案。用于远程连接(当您的应用程序在本地运行时)。在上面的代码块中,您将看到我在本地开发时在没有数据库的情况下初始化Keyv(
    newkeyv()

    从这里开始,如果我需要验证数据库存储,我可以为本地开发设置PostgreDB,但我也可以想象使用SSL连接到Heroku Postgre是可能的。如果您或任何人对此步骤有他们喜欢的解决方案,请让我知道


    @Rotzooi,我已经晚了三个月才回答你的问题,但也许这个解释可以帮助未来的人们。我还没有找到任何其他资源讨论您和我都遇到的这个问题。

    我不知道为什么您只能获取数据而不能更改它。如果你能分享一个你是如何得到和设置的例子,我也许能帮你暂时让它运行起来

    然而,我了解到:

    为什么SQLite不适合在Heroku上运行? 磁盘备份存储 SQLite在内存中运行,并将其数据存储备份到磁盘上的文件中。虽然这种策略在开发中效果很好,但Heroku的Cedar堆栈有一个短暂的文件系统。您可以写入它,也可以读取它,但内容将定期清除。如果您在Heroku上使用SQLite,您将至少每24小时丢失一次整个数据库

    即使Heroku的磁盘是持久性的,运行SQLite仍然不是一个好的选择。由于SQLite不是作为服务运行的,因此每个dyno将运行一个单独的运行副本。每个拷贝都需要自己的磁盘备份存储。这意味着为应用程序供电的每个dyno都会有一组不同的数据,因为磁盘不同步

    您可以将应用程序配置为在Postgres上运行,而不是在Heroku上使用SQLite

    然后我跟着。阅读说明是值得的,但使用说明的要点是:

    本节:

  • “使用
    heroku addons
    命令确定您的应用程序是否已经配置了heroku Postgres”
  • 如果
    heroku-postgresql
    未出现在应用程序的加载项列表中,则可以使用以下CLI命令对其进行设置:
    heroku-addons:create heroku-postgresql:hobby-dev
    • 写作时,爱好层是免费的
  • 此命令将环境变量添加到名为
    数据库\u URL
    的项目中
  • 我正在使用。我安装了它的同伴。(我还卸载了我的
    sqlite
    东西。)

    我使用新添加的
    DATABASE\u URL
    环境变量连接到上面链接的
    keyv
    步骤:

    const Keyv=require('Keyv');
    常数键=
    process.env.NODE_env!==“生产”
    ? 新Keyv()
    :new Keyv(process.env.DATABASE\u URL);
    
    我还没有找到在本地开发/测试Postgre的最佳解决方案。用于远程连接(当您的应用程序在本地运行时)。在上面的代码块中,您将看到我在本地开发时在没有数据库的情况下初始化Keyv(
    newkeyv()

    从这里开始,如果我需要验证数据库存储,我可以为本地开发设置PostgreDB,但我也可以想象使用SSL连接到Heroku Postgre是可能的。如果您或任何人对此步骤有他们喜欢的解决方案,请让我知道

    @Rotzooi,我已经晚了三个月才回答你的问题,但也许这个解释可以帮助未来的人们。我还没有找到讨论这个问题的其他资源