使用 SQLite 3 将 RoR 应用程序部署到 Heroku 失败

Posted

技术标签:

【中文标题】使用 SQLite 3 将 RoR 应用程序部署到 Heroku 失败【英文标题】:Deploying RoR app to Heroku with SQLite 3 fails 【发布时间】:2011-04-23 06:48:26 【问题描述】:

我正在尝试将我的第一个应用程序部署到 Heroku。我使用 SQLite 作为数据库。据我所知 Heroku 不使用 SQLite - 它在后端切换到 Postgres。

部署时出现以下错误:

/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.0/lib/bundler/runtime.rb:64:in `require': 没有要加载的文件 -- sqlite3(加载错误)

我的Gemfile(我认为这是导致此问题的原因)如下所示:

source 'http://rubygems.org'

gem 'rails', '3.0.0'        
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'

我做错了什么?

【问题讨论】:

那么在本地运行呢?我所有的gem文件中都有sqlite,heroku没有问题。你捆绑了吗? 我觉得我不太了解捆绑的概念。捆绑有什么作用? (一个链接就可以了) 重复Pushing Rails with SQLite3 to Heroku fails 【参考方案1】:

Heroku 不支持 SQLite 数据库。您需要在生产环境中使用 PostgreSQL,如 I also explained in this post。

group :production do
  gem "pg"
end

group :development, :test do
  gem "sqlite3", "~> 1.3.0"
end

实际上,建议在开发/测试环境中使用尽可能接近生产的环境。因此,我建议您将所有环境切换到 PostgreSQL。

# replace gem "sqlite3" with
gem "pg"

【讨论】:

你确定吗?我正在关注 RailsTutorial.org - 作者部署到 Heroku 而不做任何更改 谢谢,我不知道为什么愚蠢的教程没有提到这一点 Jaco/Simone,Heroku 并不要求您在 Gemfile 中引用 PostgreSQL,并且会忽略对 database.yml 文件中任何其他内容的引用。我在那里运行了一个基于 DB 的应用程序,没有具体引用 PG,它工作得很好。这就是为什么书中没有提到它。 我为此苦苦挣扎了一段时间(我也在关注 railstutorial.org),无论我做什么,它都没有帮助。当然,在浪费了大量时间之后,然后我意识到我忘记了将我新编辑的 Gemfile 添加并提交到 git repo。希望这可以帮助某人避免遇到同样的问题。 我看到,我不是唯一一个在阅读上述评论后感到愚蠢的人。谢谢@waffl【参考方案2】:

我正在使用 sqlite3 并部署到 Heroku 没问题。这是我的database.yml

# SQLite version 3.x
#   gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

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

【讨论】:

database.yml 文件无关紧要 - “为了简化典型 Rails 应用程序的部署,Heroku 在部署时自动生成一个新的 database.yml 文件”【参考方案3】:

Simone Carletti 是正确的,Joost 也是如此。您只需将 sqlite3 gem 分组或将其从 Gemfile 中完全删除。 Heroku 只需要知道您不想将 sqlite3 用于生产

所以这个:

...
group :development, :test do
  gem "sqlite3-ruby", "~> 1.3.0", :require => "sqlite3"
end
...

或者这个:

...
#No reference to sqlite3-ruby
...

如果你完全删除引用,你可能会弄乱你的本地数据库

【讨论】:

【参考方案4】:

我被困在这个问题上好几个小时,查看这里的每个答案,但我无法获得足够的细节来将它们组合在一起。这个页面让我经历了一切。 http://railsapps.github.io/rails-heroku-tutorial.html

祝你好运。

【讨论】:

【参考方案5】:

您可以使用clearDB addon

gem 'mysql2' 而不是gem 'sqlite3'

【讨论】:

【参考方案6】:

在解决这个问题后,我意识到我正在将我的 repo 的 master 分支推送到 heroku,而我正在我的 deploy-postgres 我的仓库的分支!

我将我的 deploy-postgres 分支与我的本地 master [git checkout master; git merge deploy-postgres] 合并,然后可以按照 heroku 文档运行 git push heroku master

【讨论】:

【参考方案7】:

我遇到了类似的问题,但我意识到我在另一个分支上 - new_layout 并且正在推动 master。 所以我使用以下命令将我想要的分支推送到heroku,一切正常。

git push heroku new_layout:master 

【讨论】:

以上是关于使用 SQLite 3 将 RoR 应用程序部署到 Heroku 失败的主要内容,如果未能解决你的问题,请参考以下文章

RoR cap 部署与 gitlab-runner 卡住并且没有触发通过响应

使用 CLI 在 AWS Elastic Beanstalk 上部署 RoR 项目

在 RoR 应用程序部署中,在设计忘记密码时连接被拒绝

Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad

尝试部署到 heroku 时出错(按照 ror 教程)PG::Error: ERROR: column "password_digest" of relationship &quo

将 .Net Core 2.0 和 Angular4 部署到 AWS 后无法发布到 Sqlite 数据库