Рельсы: Sqlite с драгоценным камнем PG - PullRequest
5 голосов
/ 29 февраля 2012

Я установил postgres на свой Mac и впервые попробовал его с Rails. Я включил гем "pg" и удалил гем sqlite3 (в конце концов, зачем вам последний, если вы используете первый). Однако при попытке запустить сервер я получил это сообщение об ошибке

.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, и теперь сервер работает нормально, но на самом деле я понятия не имею, использует ли мое тестовое приложение sqlite3 или pg?

a) Должен ли я установить гем sqlite3, если планирую использовать гем pg? б) Если у меня установлен только один из двух, есть ли способ узнать, какое из моих тестовых приложений используется в данный момент (так как оба они находятся в 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 ]

10 голосов
/ 29 февраля 2012

Здесь был мой database.yml, когда я работал с pg gem, адаптер фактически называется postgresql, и в настройках есть пара других отличий, если вы просто скопируете и вставите приведенный ниже код и измените имена баз данных, которые вы должен быть в значительной степени готов (я использовал героку, это работало там):

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:
3 голосов
/ 29 февраля 2012

В настоящее время вы устанавливаете две базы данных в одной среде - согласно Gemfile

Может случиться, что вы использовали sqlite и pg в разных средах в одном Gemfile.

, если вы хотите использовать

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:

Дайте мне знать, если вам нужна дополнительная помощь

1 голос
/ 29 февраля 2012

A) Должен ли я установить гем sqlite3, если я планирую использовать гем pg?

Нет, поскольку вы подозреваете, что вам нужен гем sqlite для sqlite и гем pg для postgres

B) Если я должен установить только один из двух, есть ли способ узнать, какое из моих тестовых приложений используется в данный момент (так как оба они находятся в Gemfile)

Да. Введите: rails db и посмотрите на вывод. Вот что вы получите за postgres:

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

C) Риторически спросили: «Зачем мне оба?»

На самом деле есть несколько сценариев, в которых вам понадобятся оба , которые включают в себя некоторые существующие данные в одной БД, некоторые в другой, преобразование приложения из одного в другое и т. Д. Правда, однако, что обычно один или другой.

...