Я запускаю свою разработку на Ubuntu 11.10 и RubyMine
Вот мои настройки для database.yml: какой RubyMine создан для меня
development:
adapter: postgresql
encoding: unicode
database: mydb_development
pool: 5
username: myuser
password:
когда я пытаюсь запустить приложение, я получаю эту ошибку ниже, кажется, что я еще не создал пользователя проекта, но как я могу создать пользователя и предоставить ему базу данных в postgres? если это проблема, то какой рекомендуемый инструмент для использования в Ubuntu для этой задачи? если это не проблема, тогда, пожалуйста, совет.
Exiting
/home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL: Peer authentication failed for user "project" (PG::Error)
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:237:in `block (2 levels) in checkout'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `block in checkout'
from /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application/finisher.rb:47:in `block in <module:Finisher>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /home/sam/RubymineProjects/project/config/environment.rb:5:in `<top (required)>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
from /home/sam/RubymineProjects/project/config.ru:4:in `block in <main>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
from /home/sam/RubymineProjects/project/config.ru:1:in `new'
from /home/sam/RubymineProjects/project/config.ru:1:in `<main>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
from /home/sam/RubymineProjects/project/script/rails:6:in `require'
from /home/sam/RubymineProjects/project/script/rails:6:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Process finished with exit code 1
Если вы установили postresql на свой сервер, тогда просто запустите: localhost в database.yml, я обычно бросаю его туда, где он говорит пул: 5. В противном случае, если он не localhost определенно скажет это приложение, где его найти.
development:
adapter: postgresql
encoding: unicode
database: kickrstack_development
host: localhost
pool: 5
username: kickrstack
password: secret
Убедитесь, что учетные данные пользователя установлены правильно, создав базу данных и назначив правообладателю пользователю вашего приложения, чтобы установить соединение. Чтобы создать нового пользователя в postgresql 9 run:
sudo -u postgres psql
установите пароль пользователя postgresql, если вы этого не сделали, он просто обратный слэш.
postgres=# \password
Создайте нового пользователя и пароль и новую базу данных пользователя:
postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow";
Теперь обновите файл database.yml после того, как вы подтвердите создание базы данных, пользователя, пароля и установите эти привилегии. Не забудьте host: localhost.
host: localhost
и pool: 5
отсутствовали в моей конфигурации. После их добавления ошибка исчезла.
Это самый надежный способ заставить ваше приложение 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';
Теперь здесь есть несколько тонкостей, поэтому отпустите их.
Вы должны увидеть это в своем терминале:
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
host: localhost
? Это было для меня настоящим хитом. Вокруг пароля вам нужны одинарные кавычки. На моей клавиатуре это shift
+ @
. С оболочкой psql вам нужны только одинарные кавычки вокруг некоторых параметров. Они нужны вам, например, вокруг пароля, а не имени роли. Честно говоря, это очень странно, но хорошо, когда узнаешь, что это нюансы :)
Для постоянного решения:
Проблема с вашим pg_hba. Эта строка:
local all postgres peer
Должно быть
local all postgres md5
Затем перезапустите сервер postgresql после изменения этого файла.
Если вы работаете в Linux, команда будет
sudo service postgresql restart
Я столкнулся с такой же проблемой на машине Ubuntu, поэтому я удалил эту ошибку, выполнив следующие шаги. Переключиться на пользователя postgres
$ sudo su - postgres
он запросит пароль и по умолчанию пароль postgres
После переключения пользователя на postgres откройте консоль psql
$ psql
поэтому проверьте версию postgres, если доступно несколько версий
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Теперь откройте postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1
- верхняя команда формы возврата версии
и замените
local all postgres peer
к
local all postgres md5
sudo service postgresql restart
Я пишу шаги в своем блоге также
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
md5
необходим ненулевой пароль для пользователя вашей базы данных (только что получил это сегодня, пытаясь максимизировать лень при создании приложения Rails).
Вы можете перейти в файл /var/lib/pgsql/data/pg _hba.conf и добавить доверие вместо Ident Это сработало для меня.
local all all trust
host all 127.0.0.1/32 trust
Для получения дополнительной информации обратитесь к этой проблеме Ошибка идентификации пользователя для пользователя
/var/lib/pgsql/9.2/data/pg_hba.conf
Если вы получите это сообщение об ошибке (Peer authentication failed for user (PG::Error)
) при выполнении модульных тестов, убедитесь, что существует тестовая база данных.