我正在设置Postgresql以用于Rails应用程序,但我似乎无法连接或正确配置数据库(启动Rails服务器后出现的错误是:{{1} }和ActiveRecord::NoDatabaseError
)。
我从关于此主题的其他几十个问题中收集了我需要切换到的内容,或者创建了“MyComputer”角色,但是我注意到它们都需要使用could not translate host name "MyProfile" to address: nodename nor servname provided, or not known
命令。当我甚至只运行psql
时,我会再次收到错误psql
。
到目前为止,我一直在关注Heroku的安装过程,并且在安装完成后卡住了here(或更准确here,其中Heroku说运行FATAL: role "MyProfile" does not exist
应该有效。我在这里错过了一个明显的步骤/做错了吗?
我也尝试过:
psql -h localhost
sudo su - MyProfile
的变种
还有一些其他命令正在努力创建这个roll / user,但我似乎无法完成解决问题所需的工作。
修改
我还运行sudo -u postgres createuser owning_user
,看起来所有与postgres相关的PID都在“MyProfile”下运行(假设我正在读它)。但psql命令仍然返回该角色不存在。 #sadface
编辑2
我刚打开Postgres应用程序并单击“打开psql”按钮。它打开终端,运行命令(ps aux | grep postgres
),然后给了我同样的错误('/Applications/Postgres.app/Contents/Versions/9.5/bin'/psql -p5432
)。或许这对我来说这是一个系统问题,而不是Rails问题?
编辑3
这肯定是一个问题,而不是铁路问题。我刚刚卸载了应用程序,使用SQLite(yucks)重新安装它,运行本地服务器并显示测试登录页面。所以问题似乎是我的本地机器,而不是应用程序本身。删除了RoR标签,仍在寻找Postgres大师关于角色问题为何仍然存在的答案:)
答案 0 :(得分:0)
如果您使用Postgres.app
,则应从config/database.yml
中删除用户名和密码。此错误也告诉您,您已输入MyProfile
而不是(或PG角色)的用户,而是作为数据库连接的主机(而不是localhost
)。
这是您config/database.yml
Postgres.app
运行所需的全部内容:
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
通常最好将其删除,让绝对必须在他的dev postgres服务器上拥有密码的傻瓜使用DATABASE_URL
env var。
答案 1 :(得分:0)
多么糟糕......我忘了提到的一件事,那可能对社区有天文数字帮助的是我接管别人的机器。有一些挥之不去的设置,只是决定他们不会发挥出色。
在一天结束时,我摆脱了Postgress.app,用Homebrew安装了postgres,我需要的余额在这里:http://exponential.io/blog/2015/02/21/install-postgresql-on-mac-os-x-via-brew/
特别是保存我的行是createdb 'whoami'
(查看实际帖子...语法与我刚刚写的因为stackoverflow格式有点不同)...回想起来似乎很明显,但它帮助我当前登录的用户通过实际创建整个设置所需的psql
数据库来克服其他旧用户的预设。
经验教训!
感谢@max的帮助,帮助我避免了我即将引起的另一个问题!
答案 2 :(得分:0)
使用Postgresql设置新的Rails应用程序时遇到了类似的问题。我在下面收到以下错误消息
FATAL: role "promisepreston" does not exist
Couldn't create 'MyBlog_development' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: FATAL: role
Caused by:
PG::ConnectionBad: FATAL: role "promisepreston" does not exist
要解决此问题,只需遵循以下解决方案
首先,我们需要通过命令行界面登录到postgres用户帐户;
sudo su - postgres
接下来,使用psql客户端作为postgres角色连接到数据库服务器:
psql -U postgres
欢迎使用PostgreSQL交互式终端psql 10.6。
postgres@Preston-PC:~$ psql -U postgres
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help
postgres=#
接下来,与psql客户端连接,我们将创建一个具有LOGIN属性和密码的角色,该角色可以创建数据库并管理角色:
postgres=# create role rolename with createdb login password 'password1';
在SQL语句的末尾注意所需的尾部分号(;)。单引号(‘)不是密码的一部分,但必须将其括起来。
它起作用了吗?您可以使用\ du命令进行检查:
postgres=# \du
您现在可以运行命令为Rails应用程序创建数据库;
rails db:create
然后运行命令为Rails应用程序迁移数据库;
rails db:migrate
就是这样。
我希望这对您有帮助
在有帮助的情况下将此答案赞为有用,或在答案下方评论以进一步说明。