【问题标题】:Ruby on Rails Heroku ErrorRuby on Rails Heroku 错误
【发布时间】:2018-02-02 03:06:26
【问题描述】:

我刚刚尝试将我的应用程序推送到 heroku,但是当我运行 heroku run rake db:migrate 时,它​​说:“目前无法运行一次性进程。请稍后再试。”关于我能做什么的任何想法?

【问题讨论】:

  • 嗯...稍后再试?
  • 谢谢?不知道这是不是讽刺,但现在已经 10 个小时了,没有成功
  • 您是否尝试过登录 bash 会话?类似heroku run bash
  • @Pagaley12 我之前的评论并非(完全)讽刺。有时 Heroku 服务会出现故障,并且有一段时间无法正常工作。您将不得不提供更多信息,或联系 Heroku 支持。
  • 我刚刚尝试运行 heroku bash 并得到了相同的答案

标签: ruby-on-rails database ruby-on-rails-3 heroku heroku-postgres


【解决方案1】:

来自 Heroku 网站本身...

"*SQLite 在内存中运行,并将其数据存储在磁盘上的文件中。虽然这种策略适用于开发,但 Heroku 的 Cedar 堆栈有一个临时文件系统。您可以对其进行写入,也可以从中读取,但内容会定期清除。如果您在 Heroku 上使用 SQLite,您将至少每 24 小时丢失一次整个数据库。

即使 Heroku 的磁盘是持久的,运行 SQLite 仍然不适合。由于 SQLite 不作为服务运行,每个 dyno 将运行一个单独的运行副本。这些副本中的每一个都需要自己的磁盘支持存储。这意味着为您的应用程序供电的每个测功机都将具有不同的数据集,因为磁盘未同步。 您可以将应用配置为在 Postgres 上运行,而不是在 Heroku 上使用 SQLite。*"

其他故障排除...

得到一个 SQLite 错误,即使它不在 Gemfile 中

如果您从 Gemfile 中删除了 gem sqlite3 行,并且在部署到 Heroku 时仍然出现错误,则您正在使用的另一个 gem 可能具有 sqlite3 作为依赖项。为了帮助找到这种依赖关系的来源,请在 Gemfile.lock 中查找 sqlite3。找到将 sqlite3 作为依赖项的 gem,并将其从 Gemfile 中删除。完成此运行包安装后,确保 sqlite3 不再存在于您的 Gemfile.lock 中。

Running Rails on PostgreSQL

PostgreSQL 数据库可以被任何语言和框架使用,this section 介绍了如何通过 Ruby on Rails 框架连接到它。在生产中使用与开发中相同的数据库很重要,因此您需要在本地安装 PostgreSQL 数据库。


如果您正在启动一个新的 Rails 应用程序,您可以通过运行将postgres 设置为默认数据库:

rails new -d postgresql

这将在您的 Gemfile 中安装 pg gem 并在本地写入正确的 config/database.yml 配置。

如果您有一个预先存在的 Rails 应用程序,或者您在没有 -d postgresql 标志的情况下运行 rails new 命令,您可以手动转换您的应用程序。

首先打开您的 Gemfile 并删除此行:

gem 'sqlite3'

用这一行替换:

gem 'pg'

然后运行捆绑安装。

接下来您需要转换 config/database.yml。打开现有文件,可能如下所示:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000


您需要将适配器从

adapter: sqlite3

到这里:

adapter: postgresql


请注意,适配器名称是 postgresql 而不是 postgres 或 pg。您还需要将database: 更改为自定义名称。最终版本可能如下所示:

development:
  adapter: postgresql
  database: my_database_development
  pool: 5
  timeout: 5000
test:
  adapter: postgresql
  database: my_database_test
  pool: 5
  timeout: 5000

production:
  adapter: postgresql
  database: my_database_production
  pool: 5
  timeout: 5000

安装pg gem 并迁移config/database.yml 文件后,您需要创建数据库并针对它运行任何预先存在的迁移:

rake db:create
rake db:migrate


现在你需要$ git add . 和$ git commit -m postgres 然后你就可以开始了。现在,当您使用 Rails 推送到 Heroku 时,将自动配置开发级 postgres 实例并连接到您的应用程序。

如果您不使用 Rails,您可能需要通过运行手动添加 postgres 插件

heroku addons:create heroku-postgresql

【讨论】:

    【解决方案2】:

    这可能意味着您达到了免费测功速率限制

    【讨论】:

      猜你喜欢
      • 2013-05-25
      • 2012-11-11
      • 2019-10-14
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多