Rails: Sqlite с драгоценным камнем PG

Я установил 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?

а) Должен ли я установить гем 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'

person Leahcim    schedule 29.02.2012    source источник
comment
Могу ли я вставить сюда ваш Gemfile? Какую версию Rails вы используете?   -  person AMIC MING    schedule 29.02.2012
comment
@Amit, rails 3.2.1, выложил gemfile в OP   -  person Leahcim    schedule 29.02.2012
comment
Похоже, что он пытается загрузить sqlite, да, Gemfile был бы полезен, также database.yml настроен на использование pg?   -  person Alex Marchant    schedule 29.02.2012
comment
@ Алекс Марчант, вы правы, я не менял database.yml. Вы знаете, как я могу изменить это сейчас? разработка: адаптер: sqlite3 база данных: db/development.sqlite3 пул: 5 тайм-аут: 5000   -  person Leahcim    schedule 29.02.2012
comment
@AlexMarchant спасибо, я только что создал новое приложение с postgres и скопировал оттуда.   -  person Leahcim    schedule 29.02.2012
comment
круто, удачи дружище! отпишись, если наткнешься на какие-нибудь сбои!   -  person Alex Marchant    schedule 29.02.2012


Ответы (3)


Вот мой файл 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:
person Alex Marchant    schedule 29.02.2012
comment
как узнать, какое у меня имя пользователя для postgres? - person Leahcim; 29.02.2012
comment
это делается на сервере postgres на вашем локальном хост-компьютере, после того как вы запустили и запустили сервер postgres, вы должны создать пользователя и идентификатор базы данных, проверьте здесь jonathandean.com/2011/08/postgresql-8-4-on-mac-os -x-10-7-lion если вы используете Mac - person Alex Marchant; 29.02.2012
comment
спасибо, к сожалению, я надеялся, что это будет так же просто, как sqlite3, где все сделано за вас. Однако я попытался СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ, и мне сказали, что команда не найдена. Я задал еще один вопрос, если вы хотите заработать еще несколько очков SO. Заранее спасибо :) stackoverflow.com/questions/9493257/ - person Leahcim; 29.02.2012
comment
Я предполагаю, что после его настройки я могу использовать одно и то же имя пользователя во всех приложениях? но я бы создал новую базу данных для каждого... - person Leahcim; 29.02.2012
comment
да, я так думаю, честно говоря, я переключился на монго, прежде чем я действительно хорошо понял это - person Alex Marchant; 29.02.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:

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

person AMIC MING    schedule 29.02.2012

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

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

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

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

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

C) На риторический вопрос: "Зачем мне оба?"

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

person junky    schedule 29.02.2012