繁体   English   中英

Ruby on Rails Heroku错误

[英]Ruby on Rails Heroku Error

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

从Heroku网站本身...

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

即使Heroku的磁盘具有持久性,运行SQLite仍然不是一个很好的选择。 由于SQLite不能作为服务运行,因此每个dyno都将运行单独的运行副本。 这些副本中的每一个都需要它们自己的磁盘支持的存储。 这意味着,由于磁盘未同步,因此为您的应用程序提供动力的每个dyno都将具有不同的数据集。 您可以将应用配置为在Postgres上运行,而不是在Heroku上使用SQLite。*“

其他疑难解答...

即使不在Gemfile中也获得SQLite错误

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

在PostgreSQL上运行Rails

PostgreSQL数据库可被任何语言和框架使用, 本节介绍如何通过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而不是postgrespg 您还需要将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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM