我正在学习Rails,我的最终应用程序将托管在使用postgres的Heroku上,所以我认为在开发过程中使用postgres也很聪明,因为我正在构建什么是应该是一个相当简单的搜索功能,并希望避免尽可能多的问题实际部署它。
可悲的是,我使用的是Ubuntu 14.04,所以步骤会比Windows更难。
这是我到目前为止所做的事情,这是一个相当滑稽的事业,进入一个世界,每一步都给我带来任何问题:
实际安装了postgresql。 sudo apt-get install postgresql-9.4
根据官方网站当然没有工作,所以我必须找到一个解决方法(一如既往),但现在应该安装。我跑了sudo apt-get install -y postgresql postgresql-contrib
让它运转起来。
尝试使用su postgres
按照某些说明登录,但即使在为su设置密码或使用无法正常工作的sudo su postgres
之后也是如此。最后创建一个sudo -u postgres createuser -P my_user
匹配我的应用名称的用户。也创建了一个数据库。
尝试使用rails new my_app --database=postgresql
创建新的rails项目。没有工作,因为它抱怨没有pg gem(抱歉没有先发制人地为你做Gemfile?)所以我放弃了,只是创建了它而没有指定数据库。
删除了sqlite gem并在Gemfile中添加了gem 'pg'
。跑bundle install
,但它没有奏效。不得不运行sudo apt-get install libpq-dev
安装一些东西,我不确定它是什么,然后才有用。
根据某些说明修改了database.yml并运行rake db:setup
。 Rails给出了这个错误:FATAL: Peer authentication failed for user "my_user"
。好吧,那很酷。
不太清楚为什么,但我在这里为所有者my_app_development
添加了一个名为my_user
的数据库,但随后db:setup又抱怨它缺乏创建数据库的权限(但是我刚刚为你创造了它?)。
我跑了chmod -R 0666 my_app
作为一个高度赞成SO的人建议但是神圣的狗屎很糟糕,因为它甚至没有授予我自己进入文件夹的权限!快速恢复并尝试了其他的东西。
有人建议运行psql -U my_user postgres
,但这只会给我一个错误psql: FATAL: Peer authentication failed for user "my_user"
通过psql postgres
实验登录(我不知道psql是什么,我只是按照建议)并尝试ALTER ROLE my_user CREATEDB;
但它只返回一个拒绝的权限错误。
正式放弃并来到这里。
任何人都可以帮助我从一开始就遵循实际的步骤吗?不应该这么难,对吗?
顺便说一下,这就是我的database.yml的样子:
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
development:
adapter: postgresql
encoding: unicode
database: my_app_development
host: localhost
pool: 5
username: my_user
password: my_password
test:
<<: *default
database: db/test.sqlite3
production:
<<: *default
database: db/production.sqlite3
编辑:非常感谢Ajay带我了解如何设置postgres。如果有人遇到这个帖子,就像我对postgres一样沮丧,这里有一些指示:
PG::InsufficientPrivilege: ERROR: permission denied to create database
表示用户没有正确的权限。通过sudo -u postgres psql
登录,您应该在终端中输入的所有内容之前看到postgres=#
。在那里,键入ALTER ROLE my_user CREATEDB;
,它应该工作。我不知道为什么我第一次使用它时,也许我忘记了sudo?
FATAL: Peer authentication failed for user "my_user"
表示您需要根据其中一个答案中的说明更改文件中的某些内容。确保为本地和postgres更改它。我将它设置为md5
除了本地之外的所有内容都有效。
通过sudo -u postgres psql
登录并在pg_catalog.pg_user中输入`select *;&#39;检查您当前的用户。查看您是否正确创建用户以及具有哪些权限的好方法。
答案 0 :(得分:3)
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
高于adapter: sqlite3
导致错误
请试试这个:
default: &default
adapter: postgresql
pool: 5
timeout: 5000
development:
<<: *default
database: my_app_development
username: psql #postgres username
password: your_password #password
在此输入有效的postgres凭据(用户名/密码)后。在终端中尝试以下内容:
$ rake db:create #this will create your my_app_development database.
$ rake db:migrate #migrate your database.
答案 1 :(得分:-1)
5. 按照一些说明修改了database.yml并运行rake DB:设置。 Rails发出此错误:致命:对等身份验证失败 对于用户“my_user”。好吧,那很酷。
您需要打开 pg_hba.conf (可能位于/etc/postgresql/9.4/main/pg_hba.conf
)并将身份验证方法从“ peer ”更改为“ md5 “(将要求输入密码)或”信任“(这将无法允许无密码访问)。
要知道pg_hba的位置,请在终端(运行postgresql的机器的终端)上执行此操作:
ps ax | grep postgresql.conf
它应该返回类似的内容:
8803 ? S 0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf
查看config_file
所在的文件夹。在这种情况下是/etc/postgresql/9.4/main/
。在这个文件夹中有另一个名为pg_hba.conf的配置文件(权限文件)。编辑它(超级用户):
sudo nano /etc/postgresql/9.4/main/pg_hba.conf
在最后一行,你会看到类似的东西:
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local all postgres trust
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
您看到“信任”引用了吗?在你的默认pg_hba.conf中,它们应该是“peer”。在我的例子中,我已经改为“信任”(即不要求密码)所有本地连接,因为我的postgresql服务器不接受外部连接。但是您可以更改为“md5”,这将允许在用户提供正确密码时进行访问。
更改后,保存并退出(在nano中 Ctrl + O ,输入确认, Ctrl + X 退出)。然后,重新启动postgresql(sudo /etc/init.d/postgresql restart
- 也许只需重新加载)
<强>更新强>
<强>声明:强>
虽然信任您的本地连接不会创建漏洞安全性(当然,除非您与其他用户共享该计算机),但仅出于测试目的 - 发现问题所在(如果是权限/ pg_hba问题)或不)。在发现问题所在之后,将一个特定用户添加到项目中并使用身份验证(“md5”,“peer”)会更简洁。
将一个用户用于计算机上的所有项目(例如“postgres”用户),和/或不使用身份验证(“trust”),就像创建一个Rails项目并只使用一个通用控制器一样为每个表/逻辑组设置一个控制器。