Cloud9 postgres

Я пытаюсь настроить базу данных postgres в приложении Rails в Cloud9.

Я выполнил следующие инструкции: https://docs.c9.io/setting_up_postgresql.html и настроил базу данных cc_database.

Мой файл database.yml выглядит следующим образом:

development:
  adapter: postgresql
  encoding: SQL_ASCII
  database: cc_database
  pool: 5
  username: postgres
  password: password

Когда я запускаю rake db: setup, я получаю следующую ошибку:

 PG::ConnectionBad: FATAL:  Peer authentication failed for user "postgres"

Я совершенно новичок во всем этом, поэтому любые советы будут высоко оценены.

Ответы

Ответ 1

Выполните следующие действия:

  • Создайте новое имя пользователя и пароль для postgresql на cloud9:

    $ sudo service postgresql start
    $ sudo sudo -u postgres psql
    postgres=# CREATE USER username SUPERUSER PASSWORD 'password';
    postgres=# \q
    
  • Создайте переменные ENV на cloud9:

    $ echo "export USERNAME=username" >> ~/.profile
    $ echo "export PASSWORD=password" >> ~/.profile
    $ source ~/.profile
    

    Моя база данных .yml для рельсов 4.2.0 на cloud9:

    default: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
      username: <%= ENV['USERNAME'] %>
      password: <%= ENV['PASSWORD'] %>
      host:     <%= ENV['IP'] %>
    
    development:
      <<: *default
      database: sample_app_development
    
    test:
      <<: *default
      database: sample_app_test
    
    production:
      <<: *default
      database: sample_app_production
    
  • Включите gem pg в Gemfile и установите:

    gem 'pg', '~ > 0.18.2'

    $ bundle install
    
  • Обновить шаблон1 postgresql для database.yml на cloud9:

    postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
    postgres=# DROP DATABASE template1;
    postgres=# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
    postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
    postgres=# \c template1
    postgres=# VACUUM FREEZE;
    postgres=# \q
    
  • Из командной строки:

    bundle exec rake db:create
    

Ответ 2

Postgresql в cloud9 настраивается для аутентификации с одноранговым узлом при подключении по локальной сети. Таким образом, быстрое разрешение изменяет пользователя в вашей базе данных .yaml текущему пользователю. В моем случае имя пользователя - ubuntu. Чтобы увидеть текущего пользователя, используйте команду

$ echo $USER

Итак, список команд в терминале есть.

$ sudo su - postgres
$ createuser ubuntu -dslP
$ Enter password for new role: **same password from your yaml file**
$ Enter it again:

Задайте свой файл yaml следующим образом

development:
  adapter: postgresql
  encoding: SQL_ASCII
  database: cc_database
  pool: 5
  username: ubuntu
  password: password

Теперь вы можете запустить

rake db:create
rake db:migrate

Ответ 3

Используйте имя пользователя "ubuntu" с пустым паролем. Моя database.yml выглядит следующим образом:

развитие:
адаптер: postgresql
кодирование: unicode
база данных: myflix_development
бассейн: 5
имя пользователя: ubuntu
пароль:

Тест:
адаптер: postgresql
кодирование: unicode
база данных: myflix_test
бассейн: 5
имя пользователя: ubuntu
пароль:

Если в этом случае он ошибается, попробуйте изменить пароль с помощью инструкций Cloud9:

В командной строке введите: sudo sudo -u postgres psql

postgres = # \password
Введите новый пароль: leave it blank and press enter
Введите его еще раз: leave it blank and press enter
postgres = # \q

Я новичок в этом. Надеюсь, что это работает!

Ответ 4

Как настроить PostgreSQL и Rails на Cloud9

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

sudo service postgresql start

Измените пароль PostgreSQL на "пароль" (или выберите другой пароль):

sudo sudo -u postgres psql

# This will open the psql client.

# Type \password and press enter to begin process
# of changing the password:
postgres=# \password

# Type your new password (e.g. "password") and press enter twice:
Enter new password: 
Enter it again: 

# Password changed, quit psql with \q
postgres=# \q 

Измените свой config/database.yml следующим образом:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

  # Important configs for cloud9, change password value
  # to what you entered in the previous psql step.
  template: template0
  username: ubuntu
  password: password

development:
  <<: *default
  database: your_app_name_development

test:
  <<: *default
  database: your_app_name_test

production:
  <<: *default
  database: your_app_name_production
  username: your_app_name
  password: <%= ENV['YOUR_APP_NAME_DATABASE_PASSWORD'] %>

(Обратите внимание, что конфигурации template, username и password в разделе default являются существенными).

Добавьте драгоценный камень pg в свой Gemfile:

gem 'pg'

Запустите bundle install.

Удалите драгоценный камень sqlite из Gemfile (и, возможно, удалите файлы db/*.sqlite3).

Создайте базу данных, загрузите schema.rb и запустите базу данных с помощью задачи db:setup:

bundle exec rake db:setup

# Run bin/rake -AD db to see all db-related tasks

Запустите или перезапустите приложение rails и проверьте, работает ли он.

Обратите внимание, что данные без семени из вашей старой базы данных sqlite не будут присутствовать в новой базе данных.

Если вы когда-либо захотите использовать клиент psql для непосредственного взаимодействия с PostgreSQL, в терминале выполните psql или запустите bin/rails db.

Ответ 5

Для меня сделать шаги в настройке рабочей области Cloud9 с Rails и Postgresql было недостаточно. Это передавалось моему пользователю, но не паролю. echo $USERNAME ничего не придумал.

Решение

$ sudo su - postgres
$ createuser ubuntu -dslP

Тогда я сделал это:

sudo sudo -u postgres psql
postgres=# \password
Enter new password: entered a real password
Enter it again: entered it again
postgres=# \q

Затем я сделал это в файле yaml (обратите внимание, что я убил часть хоста):

development:
  adapter: postgresql
  encoding: unicode
  database: my_database_name
  pool: 5
  username: ubuntu
  password: actual_password

Затем я смог создать свою базу данных с помощью:

rake db:create

И мой сервер Rails начал без каких-либо икота.

Ответ 6

Нашел решение. Необходимо изменить файл pg_hba.conf, чтобы изменить аутентификацию от однорангового узла до md5 следующим образом:

local    postgres     postgres     md5

Трудно найти файл, поскольку он доступен только через терминал в cloud9. Вы не можете найти его в дереве файлов.

Если вы введете следующее в postgres, он покажет вам местоположение

SHOW hba_file;

Затем вы можете найти и отредактировать в vim через терминал.

Ответ 7

Краткая версия, когда у вас есть приложение rails перед созданием каких-либо баз данных:

добавить драгоценный камень 'pg' удалить gem sqlite3

$ bundle install
$ gem install pg

Тогда

$sudo service postgresql start
$psql -c "create database myapp_development owner=ubuntu"

согласно https://community.c9.io/t/how-do-i-set-up-postgresql-on-c9-for-my-rails-app/2614/4

Изменение myapp для любого имени. Затем скопируйте-вставьте ниже, изменив myapp для любого имени.

/myapp/config/database.yml
    development:
      adapter: postgresql
      encoding: unicode
      database: myapp_development
      pool: 5
      username: ubuntu
      password:
      timeout: 5000

Как указано выше, пароль не требуется, имя пользователя может оставаться ubuntu.

$rake db:migrate

Если вы используете героку, вам не понадобится раздел производства в файле database.yml