Ответ 1
Подход к установке Postgres на Windows 7 для использования в качестве базы данных PostgreSQL для проекта rails 3 (3.0.7).
Преамбула (вы можете пропустить этот бит)
Итак, первое, на что следует обратить внимание: Postgres - это не просто расширение файла, отличное от .sqlite3, это целый механизм управления вашими базами данных. Как таковая, она имеет модель клиент/сервер, и вам нужно будет настроить обе системы для использования Postgres в качестве базы данных для вашего приложения rails.
Мотивация пройти через большую сложность установки Postgres по сравнению с установкой sqlite практически без усилий: если вы развертываете в Heroku, они в настоящее время используют Postgres, поэтому некоторые из ваших вызовов SQL, которые подходят для sqlite3, будут прерываться при использовании с Postgres. Гораздо проще отлаживать postgres локально, чем на серверах Heroku.
Итак, я сделал следующие вещи: (Отказ от ответственности: я, возможно, забыл включить некоторые из вещей, которые я сделал... мне потребовалось более 48 часов боли, чтобы заставить его работать... если следующий совет не работает для вас, тогда огромный ( 2300 страниц !!), но очень хорошая документация Postgres должна помочь. Я рекомендую скачать ее в любом случае, если вы серьезно относитесь к использованию Postgres, так как в нем много материала, который я только начал понимать значение.) (Второй отказ от ответственности: я почти наверняка нарушил 20 разумных рекомендаций Postgres и обнаружил дыры в безопасности в базе данных Postgres. При этом, если есть какие-то очевидные вещи, с которыми не согласен опытный пользователь Postgres, отредактируйте мой пост.)
. Шаг 1. Загрузите и установите PostgreSQL v9.0.4-1 из здесь, потому что здесь сказал, что в Windows 7 будет поддерживаться только 9.0.x. Я сохранил все параметры по умолчанию и просто использовал "секретный" в качестве пароля при запросе инсталлятора Postgres для одного (опять же, не совсем уверен, каковы последствия обмена этой информацией в Интернете... скоро я выясню, я уверен). Этот пароль понадобится вам на шаге 3.
. Шаг 2. Измените переменные среды, чтобы Path (для системы, а не для пользователя (я не уверен, важно это или нет)): C:\Program Files\PostgreSQL\9.0\bin
(Нет. Я нахожусь на 64-битных окнах, следовательно, он не устанавливается для 32-битных в 'C:\Program Files (x86)\PostgreS...')
Не забудьте изменить права доступа к папке PostgreSQL\9.0 и удалить все права по умолчанию для папки или содержимого. (Вам также может понадобиться перезагрузить компьютер, чтобы они вступили в силу - спасибо @Gavin -although маловероятно).
. Шаг 3. Протестируйте установку Postgres, попытавшись создать новую базу данных:
Из командной строки: createdb -U postgres mydb_as_postgres
.
Вам нужно будет ввести пароль сейчас, если нет, возможно, вам сначала нужно запустить сервер (я не могу вспомнить, нужно ли мне это делать или нет). Самый простой способ - через pgAdmin III, который должен быть "pgAdmin3.exe" в папке где-то вроде C:\Program Files\PostgreSQL\9.0\bin
. После запуска pgAdmin III слева должна появиться панель "Браузер объектов". В этом должно быть дерево с:
Группы серверов> Серверы> PostgreSQL 9.0 (localhost: 5432)
Щелкните правой кнопкой мыши "PostgreSQL 9.0 (localhost: 5432)" и выберите "Подключиться".
Команда createdb -U postgres mydb_as_postgres
должна создать новую базу данных с именем "mydb_as_postgres", которую вы можете проверить, запустив pgAdmin III и дважды щелкнув "PostgreSQL 9.0 (localhost: 5432)". Под этим должно быть:
Databases (2)
, в котором должны быть перечислены 2 базы данных с именами mydb_as_postgres
и postgres
Я назвал его _as_postgres
, потому что часть команды -U postgres
говорит Postgres создать базу данных с пользователем postgres в качестве ее владельца, которую необходимо указать, когда вы не вошли в систему как пользователь postgres. У меня все мои файлы хранятся как пользователь 'AJames', поэтому, если вы одинаковы и хотите продолжать разрабатывать свое приложение, когда вы вошли в систему как другой пользователь, вам нужно сейчас создать роль Postgres для этого пользователя (см. шаг 4).
Шаг 4. Через pgAdmin III. Щелкните правой кнопкой мыши Роли входа (которые для меня включены):
Браузер объектов> Группы серверов> Серверы> PostgreSQL 9.0 (localhost: 5432)> Роли входа в систему
Щелкните правой кнопкой мыши Роли входа и выберите "Новая роль входа..." в названии роли введите имя пользователя вашей операционной системы, для меня это AJames, и введите свой пароль на вкладке "Права доступа к ролям", я установил все флажки, но опытный пользователь postgres, вероятно, настоятельно рекомендует проверять только "наследует права от родительских ролей" и "может создавать объекты базы данных", но я " Я не опытный пользователь и просто хочу отлаживать SQL-вызовы Rails в Postgres, поэтому я также проверил "Суперпользователь" и "Может создавать роли", на всякий случай.
. Шаг 5. Теперь вы сможете создавать новую базу данных, не входя в систему как пользователь postgres. Попробуйте ввести:
createdb mydb_as_user
Надеюсь, это должно сработать для вас.
Шаг 6. Итак, у вас есть файл development.sqlite3 в каталоге rails 'db/'. Первоначально я собирался установить следующий тест как преобразование этого из sqlite3 в psql.
Я не мог заставить это работать, но я оставил свои попытки здесь, поскольку решение, которое я использовал, требовало наличия данных в приложении Rails на Heroku.com (см. вместо этого решение с шага 7 и далее). Для тех, у кого есть только локальное приложение и нет данных в Heroku, они не могут использовать тот же подход, поэтому им может потребоваться изучить что-то вроде этого:
x6.1 Сначала проверьте 'psql', выполнив команду из командной строки, например:
psql mydb_as_user
это должно отобразить что-то вроде ниже (после того, как вы ввели свой пароль):
C:>psql mydb_as_user
Password:
psql (9.0.4)
WARNING: Console code page (850) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
mydb5=#
x6.2 попробуйте ввести:
CREATE TABLE users_table (id integer, "name" text);
Должно отображаться:
CREATE TABLE
mydb5=#
Если вы зарегистрируетесь в pgAdmin III, вы должны увидеть таблицу там:
Браузер объектов> Группы серверов> Серверы> PostgreSQL 9.0 (localhost: 5432)> Базы данных> mydb_as_user> Схемы> public> Таблицы> users_table>
x6.3 Хорошо, теперь попробуем конвертацию. Скачанный предварительно скомпилированный двоичный файл sqlite-shell для Windows.
x6.4 Создайте новый каталог, я использовал "C:\temp" и поместил в него файл sqlite3.exe и ваши файлы development.sqlite3.
x6.5 Используйте следующие команды (которые из здесь), чтобы выгрузить базу данных development.sqlite3 в Postgres.
sqlite3 development .dump | psql development2
Вы можете получить сообщение об ошибке, например:
psql: FATAL: database "development2" does not exist
x6.6, поэтому я вошел в pgAdmin III и создал базу данных для разработки 2, снова попробовал команду и получил:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Как я уже сказал, я не мог заставить его работать. Я уверен, что есть способ обойти эту ошибку, но я подумал о другом, и поэтому вместо этого я использовал это решение (для которого нужны учетные записи Heroku для ваших данных и выполняется преобразование из sqlite3 в psql с использованием гема Taps (I верить):
Шаг 7. в pgAdmin III я создал другую базу данных. На вкладке свойств я устанавливаю имя: "разработка", владелец: "AJames" (замените его своим собственным именем пользователя Windows). А на вкладке привилегий установите роль: public и отметьте опцию ALL (думал, что это сбрасывается на непроверенный, поэтому я не уверен, что это необходимо).
Шаг 8. добавить
gem 'pg', '0.11.0'
в ваш файл драгоценного камня. Возможно, вы также захотите удалить:
gem 'sqlite3'
в этот момент тоже.
. Шаг 9. установите файл database.yml, как предложено здесь, на:
development:
adapter: postgresql
database: db/development
username: AJames # replace this with your own user name
password: secret # replace this with your own password
host: localhost
encoding: UTF8
pool: 5
timeout: 5000
Если вы работаете над проектом с открытым исходным кодом и не хотите, чтобы ваш пароль был общедоступным, взгляните на некоторые ответы на Безопасное предоставление пароля базы данных в приложении Rails.
Шаг 10. из командной строки в корневом каталоге вашего приложения rails запустите:
rake db:migrate
Это создаст новую схему и все таблицы в базе данных Postgres.
Шаг 11. запустите heroku db:pull
из командной строки (снова из корневого каталога вашего приложения rails), чтобы перенести все ваши данные в новую пустую базу данных Postgres. Я думаю, что в этот момент ваш жетон будет делать эту работу за вас.
. Шаг 12. Надеюсь, нет 12 шага!... и теперь он должен работать на вас. Счастливая отладка RoR PostgreSQL! Пожалуйста, измените или дайте мне знать, если есть какие-либо ошибки в этом.
Кроме того, вот список дополнительных вещей, которые могут быть интересны/полезны:
- Это сообщение в блоге о паролях Postgres, для чего они нужны, зачем они нужны, как их менять и т.д.
- Это в разделе "Создание пространственной базы данных" полезно для новичков понять, что такое pg_hba.conf о и второй ссылке, Рено дал выше, под "Использование графического интерфейса pgAdmin III" полезно для тестирование, чтобы увидеть, действительно ли Postgres работает, прежде чем пытаться соответствовать это с помощью Rails (то есть попробуйте создать базу данных и поставить таблицу и некоторые данные в него).
- В огромной, но очень полной документации Postgres я бы начать на странице 58, "я" руководство'. Тогда на странице PDF 431 (!) Есть "Глава 17. Настройка и эксплуатация сервера", которую я также нашел полезным.