rails 3 postgreSQL basic 'база данных не существует' - PullRequest
9 голосов
/ 13 декабря 2011

ОК, я собираю свое первое приложение rails 3.0 и хочу протестировать сервер postgreSQL как рабочий на моей машине для разработки (которая работает под управлением 10.6). Когда вы создаете новое приложение и используете rake db: migrate, он создает sqlite db для всех трех сред. Здорово. Теперь я хочу научиться переходить на производство и использовать postgres. Я использовал homebrew для установки postgres, установил pg (env ARCHFLAGS="-arch x86_64" gem install pg) и postgres-pr gems.

Я запустил rake db:migrate в надежде, что, как и в случае с sqlite3, он автоматически соберет мой рабочий сервер, так как я обновил свой database.yml (см. Ниже).

ОК, в папке моего приложения я перезагружаю сервер, используя 'rails s --environment=production', и он выдает сообщение, что не может найти мою производственную базу данных.

Так что все поиски в Google по запросу 'rails 3 postgres install' позволили мне зайти так далеко, но я, похоже, что-то упустил, потому что rails не может создать новую базу данных pg.

postgres работает, как определено пс.

createdb -Omysuperusername -Eutf8 vitae_production
createdb -Omysuperusername -Eutf8 /Users/sam/apps/vitae/db/vitae_production

Но в этом каталоге нет этой базы данных, поэтому я что-то упустил. Что я пропускаю?

это мой фрагмент database.yml:

production:
  adapter: postgresql
  host: localhost
  database: db/vitae_production
  pool: 5
  timeout: 5000
  username: mysuperusername
  password:

Ответы [ 2 ]

12 голосов
/ 14 декабря 2011

Здесь происходит пара вещей. Прежде всего, вы, кажется, смешиваете формат SQLite и PostgreSQL для параметра database: в вашем database.yml. В SQLite вы указываете относительный путь к файлу базы данных SQLite , например:

database: db/vitae_production.sqlite

но с PostgreSQL вы указываете имя базы данных примерно так:

development:
  database: vitae_development
  username: rails
  ...

Затем, после установки database.yml, вы создадите пользователя базы данных (при необходимости) изнутри psql:

psql> create role rails login;

и затем позволяют Rails создавать базу данных :

$ rake db:create

Тогда вы сможете запустить свои миграции, чтобы создать свои исходные таблицы, и все - и все.

Возможно, вы хотите прочитать документацию create role, чтобы убедиться, что вы получите правильные варианты. Вы, вероятно, хотите работать в среде разработки, а не в производстве, поэтому я изменил имена и YAML, чтобы отразить это, производство предназначено для развертывания, и я не думаю, что вы пока что развертываете что-либо.

4 голосов
/ 14 декабря 2011

Я не знаком с rails, но вы можете создать свою базу данных в качестве суперпользователя postgres, а затем предоставить привилегии, предполагая, что в вашем дистрибутиве linux супер-пользователем postgres является postgres:

su root
su postgres
createdb vitae_production

, а затем в postgres.предоставьте права другому пользователю

psql
CREATE USER rails WITH PASSWORD 'myPassword';
GRANT ALL PRIVILEGES ON DATABASE vitae_production TO rails;
ALTER DATABASE vitae_production OWNER TO rails;

, тогда ваш файл конфигурации должен выглядеть следующим образом:

production:
  adapter: postgresql
  host: localhost
  database: vitae_production
  pool: 5
  timeout: 5000
  username: rails
  password: myPassword
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...