Rails:带有PG gem的Sqlite

时间:2012-02-29 02:37:43

标签: ruby-on-rails postgresql sqlite rails-postgresql

我在Mac上安装了postgres并且第一次使用Rails进行了尝试。我包括了宝石“pg”并删除了sqlite3 gem(毕竟,如果使用前者,为什么你需要后者)。但是,当我尝试启动服务器时,我收到此错误消息

.rvm/gems/ruby-1.9.3-rc1@rails321/gems/bundler-1.0.22/lib/bundler/rubygems_integration.rb:143:in `block in replace_gem': Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (sqlite3 is not part of the bundle. Add it to Gemfile.) (LoadError)

所以我再次包含sqlite3 gem,现在服务器工作正常,但我实际上不知道我的测试应用程序是否使用sqlite3或pg?

a)如果我打算使用pg gem,我是否应该安装sqlite3 gem? b)如果我只应该安装两个中的一个,有没有办法找出我的测试应用当前正在使用哪一个(因为它们都在Gemfile中)

的Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.1'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'pg'
gem 'devise'
gem 'sqlite3'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

3 个答案:

答案 0 :(得分:10)

这是我的database.yml,当我使用pg gem时,适配器实际上被称为postgresql,并且设置中还有其他一些差异,如果你只是复制并粘贴下面的代码并更改数据库名称你应该已经准备好了(我使用了heroku,这在那里工作):

development:
  adapter: postgresql
  encoding: utf8
  reconnect: false
  database: DATABASE_DEVELOPMENT
  pool: 5
  username: USER_NAME
  password:
  host: localhost

test:
  adapter: postgresql
  encoding: utf8
  reconnect: false
  database: DATABASE_TEST
  pool: 5
  username: USER_NAME
  password:
  host: localhost

production:
  adapter: postgresql
  encoding: utf8
  reconnect: false
  database: DATABASE_PRODUCTION
  pool: 5
  username: root
  password:

答案 1 :(得分:3)

目前,您正在同一环境中安装两个数据库 - 根据Gemfile

在一个Gemfile中,您可能会在不同的环境中使用sqlite和pg。

如果你想使用

gem 'sqlite3'

group :production do
  gem 'pg', '0.12.2'
end

所以现在我在开发模式和生产中使用sqlite3我正在使用pg,所以在你的database.yml中你需要放置两个连接,首先是开发模式和生产模式

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

production:
  adapter: pg (please correct the adapter)
  database: 
  user:
  password:

如果您需要更多帮助,请告诉我

答案 2 :(得分:1)

A)如果我打算使用pg gem,我是否应该安装sqlite3 gem?

不,因为你怀疑你需要sqlite的sqlite gem和postgres的pg gem

B)如果我只应该安装两个中的一个,有没有办法找出我的测试应用当前正在使用哪一个(因为它们都在Gemfile中)

是。输入:rails db并查看输出。 以下是postgres的内容:

$rails db
psql (9.1.2)
Type "help" for help.

C)反问道:“为什么我需要两者?”

实际上,在某些情况下,您需要两者,其中包括一个数据库中的某些现有数据在另一个数据库中,将应用程序从一个转换为另一个,等等。但是,它确实是通常是一个或另一个。