2010-10-09 85 views
37

我试图将我的第一个应用程序部署到Heroku。我使用Sqlite作为数据库。据我所知Heroku不使用Sqlite - 它在后台切换到Postgres。使用Sqlite3将RoR应用程序部署到Heroku

当我部署我得到以下错误:

/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.0/lib/bundler/runtime.rb:64:in `require': no such file to load -- sqlite3 (LoadError)

我的Gemfile(这是我认为是造成这个问题),如下所示:

source 'http://rubygems.org' 

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

我在做什么错误?

+0

如何在本地运行它?我在我的所有宝石文件中都有sqlite,并且与heroku没有任何问题。你捆绑了吗? – 2010-10-09 19:59:26

+0

我不认为我很理解捆绑的概念。捆绑包是做什么的? (链接将会这样做) – 2010-10-10 11:39:27

+0

[将SQLite3推到Heroku失败]重复(http:// stackoverflow。com/questions/3747002 /推动rails-with-sqlite3-to-heroku-失败) – 2014-05-25 20:51:16

回答

53

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" 
+0

你确定吗?我一直在RailsTutorial.org - 作者部署到Heroku而不会改变任何东西 – 2010-10-10 11:43:09

+0

在这里阅读http://docs.heroku.com/database – 2010-10-10 16:32:03

+4

谢谢,我不知道为什么愚蠢的教程不提到那个 – 2010-10-10 18:28:38

-4

我正在使用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 
+7

database.yml文件并不重要 - “为了简化典型Rails应用程序的部署,Heroku在部署时自动生成一个新的database.yml文件” – 2010-10-10 18:37:19

3

西蒙娜卡莱蒂是正确的,所以是Joost。您只需将sqlite3 gem分组或将其从Gemfile中完全删除即可。 Heroku的只需要知道你不想使用sqlite3的生产

所以这个:

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

或者这样:

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

如果删除完全引用你大概会乱你的本地数据库虽然

0

敲我的头靠在这个问题后,我意识到,我推着我的回购协议的Heroku的分支,而我是让所有我的postgres更改了我的deploy-postgres我的回购分支!

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