Я використовував SQLite у розробці та тестуванніPostgreSQL у виробництві на Heroku. Я хотів би замінити SQLite на PostgreSQL. Я програмую в середовищі Cloud9 (Rails 4). У мене немає даних, які я потенційно може втратити.
Що я зробив:
Спочатку я редагував database.yml:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: app_development
test:
<<: *default
database: app_test
production:
<<: *default
database: app_production
Потім:
- У Gemfile я переїхав
gem "pg"
від виробничого середовища тільки до всіх середовищ і видаленіgem "sqlite3"
- Я побігла
bundle install
. - Я побігла
sudo service postgresql start
- Я побігла
sudo sudo -u postgres psql
- І ввійшов
create database "app_development";
- Вступив
q
Оновлення: Я додав такі додаткові кроки:
- Я створив нового користувача в psql with
CREATE USER my_username SUPERUSER PASSWORD "my_password";
- У database.yml я додав
username
іpassword
- У database.yml я додав
host: myurl.c9.io
- Я ввів у psql:
GRANT ALL ON DATABASE app_development to my_username
Біг sudo sudo -u postgres psql
і потім list
виробляє:
Name | Owner | Encoding | Collate | Ctype | Access privileges
postgres | postgres | SQL_ASCII | C | C |
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
app_development | postgres | SQL_ASCII | C | C |
Я не бачу тут свого імені користувача як власника app_development ...
Помилка: Біг rake db:migrate
тайм-аут із зазначенням PG::ConnectionBad: could not connect to server: Connection timed out Is the server running on host "myurl.c9.io" (ip address) and accepting TCP/IP connections on port 5432?
.
Чому зв'язок з PostgreSQL може бути невдалим?
Відповіді:
1 для відповіді № 1Замінити вміст файлу database.yml на:
default: &default
adapter: postgresql
host: localhost
username: yourusername
password: yourpassword
timeout: 5000
port: 5432
development:
<<: *default
database: app_development
test:
<<: *default
database: app_test
production:
<<: *default
database: app_production
Тому що ви використовуєте Heroku, то ви можете залишити виробничу секцію як є