我有一个Rails应用程序,它一直在为数据库使用sqlite3。部署到Heroku。然后发现Heroku建议切换到PostgreSQL。所以现在我试图切换没有运气。 Was trying to use this Railscasts video for help
我安装了Homebrew。通过Homebrew安装PostgreSQL。安装后,没有提到为postgres创建用户名或密码。
我将我的Gemfile编辑为
gem 'pg'
用于生产和开发,并bundle install
。
我将database.yml
文件编辑为:
development:
adapter: postgresql
database: isement_dev
encoding: unicode
pool: 5
timeout: 5000
test:
adapter: postgresql
database: isement_test
encoding: unicode
pool: 5
timeout: 5000
production:
adapter: postgresql
database: isement_production
encoding: unicode
pool: 5
timeout: 5000
就像Ryan在视频中所说的那样,我尝试这个命令:
rake db:create:all
只是为了得到这个错误:
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
我还做了一些搜索,看到一些教程显示了database.yml
文件中包含的用户名和密码。然后我会了解如何setup a user for Postgresql
输入命令$ createuser joe
后,我从未获得过医生说你会被问到的选项。比如"新角色应该是超级用户吗? (Y / N)"所以真的不确定用户是否已创建,但也没有任何错误。
所以,我假设在创建用户" joe"之后,我重新编写了我的database.yml
文件以包含我刚刚创建的用户字段:
development:
adapter: postgresql
database: isement_dev
encoding: unicode
pool: 5
timeout: 5000
username: joe
password:
test:
adapter: postgresql
database: isement_test
encoding: unicode
pool: 5
timeout: 5000
只是仍然得到无法连接的相同错误。
我已经运行了命令
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
确保服务器正在运行。
以防万一需要,当我跑步时
which psql
我收到了这个:
/usr/local/bin/psql
我有什么遗失的东西吗? "数据库名称" database.yml file
的一部分。这应该是已在某处创建的数据库,或者在运行rake db:create:all
命令时此文件是否创建了数据库?我假设后者,所以数据库的名称并不重要?
答案 0 :(得分:4)
懒惰选项:将host: localhost
添加到您的database.yml
。
只有稍微不那么懒的选项:卸载并重新安装pg
gem。
这里发生了什么? Postgres有很多方法已经存在于你的系统中,如果你在安装自己的Postgres副本之前安装gem,pg
gem将使用他们的pg_config
输出并构建它们的需求。
在您的情况下,它是为某些Mac OS X版本附带的版本构建的,它使用/var/pgsql_socket
处的套接字文件。
答案 1 :(得分:0)
当您通过Homebrew安装Postgres时,它会将您的用户名添加到postgres并使用空密码。
只需打开命令提示符并输入
即可whoami
然后使用空密码将database.yml更改为您的mac用户名(无论是从whoami返回的内容)。
也许添加主机:localhost 你的database.yml