когда я пытаюсь запустить приложение, я получаю эту ошибку ниже, кажется, что я еще не создал пользователя проекта, но как я могу создать пользователя и предоставить ему базу данных в postgres? если это проблема, то какой рекомендуемый инструмент для использования в Ubuntu для этой задачи? если это не проблема, тогда, пожалуйста, совет.
Ответ 2
Это самый надежный способ заставить ваше приложение rails работать с postgres в среде разработки в Ubuntu 13.10.
1) Создайте приложение rails с помощью postgres YAML и жемчуга "pg" в Gemfile:
$ rails new my_application -d postgresql
2) Дайте ему некоторую функциональность CRUD. Если вы просто видите, работает ли postgres, создайте эшафот:
$ rails g scaffold cats name:string age:integer colour:string
3) Начиная с rails 4.0.1
параметр -d postgresql
генерирует YAML, который не включает параметр хоста. Я нашел, что мне это нужно. Отредактируйте раздел разработки и создайте следующие параметры:
encoding: UTF-8
host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword
Обратите внимание, что параметр database
предназначен для базы данных, которая еще не завершена, а username
и password
являются учетными данными для роли, которая также не существует. Мы создадим их позже!
Вот как должен выглядеть config/database.yml
(без стыда в copypasting: D):
development:
adapter: postgresql
pool: 5
# these are our new parameters
encoding: UTF-8
database: my_application_development
host: localhost
username: thisismynewusername
password: thisismynewpassword
test:
# this won't work
adapter: postgresql
encoding: unicode
database: my_application_test
pool: 5
username: my_application
password:
production:
# this won't work
adapter: postgresql
encoding: unicode
database: my_application_production
pool: 5
username: my_application
password:
4) Запустите оболочку postgres с помощью этой команды:
$ psql
4a) Вы можете получить эту ошибку, если ваш текущий пользователь (как у вашего пользователя компьютера) не имеет соответствующей роли postgres администрации.
psql: FATAL: role "your_username" does not exist
Теперь я только установил postgres один раз, поэтому я могу ошибаться здесь, но я думаю, postgres автоматически создает роль администрирования с теми же учетными данными, что и пользователь, который вы установили postgres as.
4b) Итак, это означает, что вам нужно перейти на пользователя, который установил postgres, чтобы использовать команду psql и запустить оболочку:
$ sudo su postgres
И затем запустите
$ psql
5) Вы узнаете, что находитесь в оболочке postgres, потому что ваш терминал будет выглядеть следующим образом:
$ psql
psql (9.1.10)
Type "help" for help.
postgres=#
6) Используя синтаксис postgresql, создайте пользователя, указанного в разделе config/database.yml
development:
postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';
Теперь здесь есть несколько тонкостей, поэтому отпустите их.
- В имени пользователя роли, thisismynewusername, нет нет кавычек вокруг него
- Укажите ключевое слово LOGIN после WITH. Если вы этого не сделаете, роль все равно будет создана, но она не сможет войти в базу данных!
- Пароль роли, thisismynewpassword, должен быть в одинарных кавычках. Не двойные кавычки.
- Добавьте конец двоеточия в конец;)
Вы должны увидеть это в своем терминале:
postgres=#
CREATE ROLE
postgres=#
Это означает, что "ROLE CREATED", но оповещения postgres, похоже, принимают те же самые императивные соглашения от концентратора git.
7) Теперь, все еще в оболочке postgres, нам нужно создать базу данных с именем, которое мы установили в YAML. Создайте пользователя, которого мы создали на шаге 6, его владельца:
postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;
Вы узнаете, были ли вы успешны, потому что вы получите результат:
CREATE DATABASE
8) Закройте оболочку postgres:
\q
9) Теперь момент истины:
$ RAILS_ENV=development rake db:migrate
Если вы это получили:
== CreateCats: migrating =================================================
-- create_table(:cats)
-> 0.0028s
== CreateCats: migrated (0.0028s) ========================================
Поздравляем, postgres отлично работает с вашим приложением.
9a) На моей локальной машине я все время получал ошибку разрешения. Я точно не помню, но это была ошибка в строках
Can't access the files. Change permissions to 666.
Хотя я бы посоветовал очень тщательно подумать о том, чтобы рекурсивно устанавливать приоритеты написания на производственной машине, локально я дал всем своим приложениям права на чтение, такие как:
9b) Поднимитесь на один уровень каталога:
$ cd ..
9c) Задайте разрешения для каталога my_application и всего его содержимого на 666:
$ chmod -R 0666 my_application
9d) И снова запустите миграцию:
$ RAILS_ENV=development rake db:migrate
== CreateCats: migrating =================================================
-- create_table(:cats)
-> 0.0028s
== CreateCats: migrated (0.0028s) ========================================
Некоторые подсказки и трюки, если вы дергаете
Попробуйте выполнить эти действия перед перезапуском всех этих шагов:
Пользователь mynewusername не имеет привилегий для CRUD для базы данных my_app_development
? Отбросьте базу данных и создайте ее с помощью mynewusername в качестве владельца:
1) Запустите оболочку postgres:
$ psql
2) Отбросьте базу данных my_app_development
. Быть осторожен! Падение означает полное удаление!
postgres=# DROP DATABASE my_app_development;
3) Создайте еще один my_app_development
и сделайте mynewusername владельцем:
postgres=# CREATE DATABASE my_application_development OWNER mynewusername;
4) Закройте оболочку:
postgres=# \q
Пользователь mynewusername
не может войти в базу данных? Думаете, вы написали неправильный пароль в YAML и не можете запомнить пароль, который вы ввели, используя оболочку postgres? Просто измените роль с помощью пароля YAML:
1) Откройте свой YAML и скопируйте пароль в буфер обмена:
development:
adapter: postgresql
pool: 5
# these are our new parameters
encoding: UTF-8
database: my_application_development
host: localhost
username: thisismynewusername
password: musthavebeenverydrunkwheniwrotethis
2) Запустите оболочку postgres:
$ psql
3) Обновите пароль mynewusername
. Вставьте пароль и не забудьте включить в него одинарные кавычки:
postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;
4) Закройте оболочку:
postgres=# \q
Попытка подключиться к localhost через средство просмотра базы данных, такое как Dbeaver, и не знаете, какой у вас пароль пользователя postgres? Измените его так:
1) Запустите passwd
как суперпользователь:
$ sudo passwd postgres
2) Введите пароль своих учетных записей для sudo
(ничего общего с postgres):
[sudo] password for starkers: myaccountpassword
3) Создайте новую учетную запись postgres:
Enter new UNIX password: databasesarefun
Retype new UNIX password: databasesarefun
passwd: password updated successfully
Получение этого сообщения об ошибке?:
Run `$ bin/rake db:create db:migrate` to create your database
$ rake db:create db:migrate
PG::InsufficientPrivilege: ERROR: permission denied to create database
4) Вам нужно дать возможность пользователю создавать базы данных. Из оболочки psql:
ALTER ROLE thisismynewusername WITH CREATEDB
ALTER ROLE thisismynewusername WITH CREATEDB