我应该遵循哪些步骤在我的Rails应用程序中使用postgresql进行开发?

时间:2015-01-28 09:29:44

标签: ruby-on-rails postgresql

我正在学习Rails,我的最终应用程序将托管在使用postgres的Heroku上,所以我认为在开发过程中使用postgres也很聪明,因为我正在构建什么是应该是一个相当简单的搜索功能,并希望避免尽可能多的问题实际部署它。

可悲的是,我使用的是Ubuntu 14.04,所以步骤会比Windows更难。

这是我到目前为止所做的事情,这是一个相当滑稽的事业,进入一个世界,每一步都给我带来任何问题:

  1. 实际安装了postgresql。 sudo apt-get install postgresql-9.4根据官方网站当然没有工作,所以我必须找到一个解决方法(一如既往),但现在应该安装。我跑了sudo apt-get install -y postgresql postgresql-contrib让它运转起来。

  2. 尝试使用su postgres按照某些说明登录,但即使在为su设置密码或使用无法正常工作的sudo su postgres之后也是如此。最后创建一个sudo -u postgres createuser -P my_user匹配我的应用名称的用户。也创建了一个数据库。

  3. 尝试使用rails new my_app --database=postgresql创建新的rails项目。没有工作,因为它抱怨没有pg gem(抱歉没有先发制人地为你做Gemfile?)所以我放弃了,只是创建了它而没有指定数据库。

  4. 删除了sqlite gem并在Gemfile中添加了gem 'pg'。跑bundle install,但它没有奏效。不得不运行sudo apt-get install libpq-dev安装一些东西,我不确定它是什么,然后才有用。

  5. 根据某些说明修改了database.yml并运行rake db:setup。 Rails给出了这个错误:FATAL: Peer authentication failed for user "my_user"。好吧,那很酷。

  6. 不太清楚为什么,但我在这里为所有者my_app_development添加了一个名为my_user的数据库,但随后db:setup又抱怨它缺乏创建数据库的权限(但是我刚刚为你创造了它?)。

  7. 我跑了chmod -R 0666 my_app作为一个高度赞成SO的人建议但是神圣的狗屎很糟糕,因为它甚至没有授予我自己进入文件夹的权限!快速恢复并尝试了其他的东西。

  8. 有人建议运行psql -U my_user postgres,但这只会给我一个错误psql: FATAL: Peer authentication failed for user "my_user"

  9. 通过psql postgres实验登录(我不知道psql是什么,我只是按照建议)并尝试ALTER ROLE my_user CREATEDB;但它只返回一个拒绝的权限错误。

  10. 正式放弃并来到这里。

  11. 任何人都可以帮助我从一开始就遵循实际的步骤吗?不应该这么难,对吗?

    顺便说一下,这就是我的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;检查您当前的用户。查看您是否正确创建用户以及具有哪些权限的好方法。

2 个答案:

答案 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项目并只使用一个通用控制器一样为每个表/逻辑组设置一个控制器。