使用 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 项目
Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad
尝试部署到 heroku 时出错(按照 ror 教程)PG::Error: ERROR: column "password_digest" of relationship &quo