5

我在我的 Mac 上安装了 postgres,并第一次使用 Rails 进行了尝试。我包括 gem "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 中)

宝石文件

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'
4

3 回答 3

10

这是我在使用 pg gem 时的 database.yml,适配器实际上称为 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:
于 2012-02-29T03:10:28.657 回答
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:

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

于 2012-02-29T02:56:02.983 回答
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) 反问:“为什么我需要两者?”

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

于 2012-02-29T03:17:28.513 回答