Ruby-on-rails 在 Rails 中,无法为 {"adapter"=>"postgresql" 创建数据库,
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10763143/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
In Rails, Couldn't create database for {"adapter"=>"postgresql",
提问by Martin
I'm trying to run rake db:createor rake db:setupbut I get the following error. It's strange because rake db:createit's working fine from others folders with other Rails projects.
我正在尝试运行rake db:create,rake db:setup但出现以下错误。这很奇怪,因为rake db:create它在其他 Rails 项目的其他文件夹中运行良好。
user:project user$ rake db:create
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:991:in `initialize'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:991:in `new'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:991:in `connect'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:260:in `initialize'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:27:in `new'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:27:in `postgresql_connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:304:in `new_connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:323:in `checkout_new_connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:265:in `block (2 levels) in checkout'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:261:in `loop'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:261:in `block in checkout'
/Users/user/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:260:in `checkout'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:162:in `connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:409:in `retrieve_connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:107:in `retrieve_connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:89:in `connection'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/railties/databases.rake:110:in `rescue in create_database'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/railties/databases.rake:54:in `create_database'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 3.1.0/lib/active_record/railties/databases.rake:42:in `block (2 levels) in <top (required)>'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/user/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/Users/user/.rvm/gems/ruby-1.9.2-p290/bin/rake:19:in `load'
/Users/user/.rvm/gems/ruby-1.9.2-p290/bin/rake:19:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "database"=>"project_test", "username"=>nil, "password"=>nil, "min_messages"=>"warning"}
This is my database.yml
这是我的 database.yml
development:
adapter: postgresql
database: project_development
username:
password:
min_messages: warning
test:
adapter: postgresql
database: project_test
username:
password:
min_messages: warning
production:
adapter: postgresql
database: project_production
username:
password:
min_messages: warning
Posgree is insatelled on /usr/local/var/postgres. Shouldn't rake try to look it in the same folder instead of /var/pgsql_socket/? (I don't have a /usr/local/var/pgsql_socket anyways)
Posgree 安装在/usr/local/var/postgres. 不应该 rake 尝试在同一个文件夹中查看它而不是/var/pgsql_socket/?(反正我没有 /usr/local/var/pgsql_socket )
回答by Martin
Solved!
解决了!
Solution was simple to update current installed gems.
解决方案很简单,更新当前安装的 gems。
Another solution to try is set host: localhostor whatever host you use on development settings on database.yml file.
另一种尝试的解决方案是 sethost: localhost或您在 database.yml 文件的开发设置中使用的任何主机。
回答by zquintana
I installed PG on Mac OS X via Homebrew (I didn't realize it came default in Mac OS X), and had the same problem. I may have made the problem worse by installing the pg gem before installing pg via Homebrew.
我通过 Homebrew 在 Mac OS X 上安装了 PG(我没有意识到它在 Mac OS X 中是默认的),并且遇到了同样的问题。在通过 Homebrew 安装 pg 之前安装 pg gem 可能使问题变得更糟。
I solved this same problem by doing the following:
我通过执行以下操作解决了同样的问题:
- Make sure that all binaries are pointing to binaries in Cellar directory (/usr/local/Cellar on Mac OS X)
- Uninstall pg gem
gem uninstall pg - Reinstall with Homebrew configs
gem install pg -- --with-pg-config=/usr/local/bin/pg_config(if you created a rails project with pg setup, this is explained in your database.yml config file)
- 确保所有二进制文件都指向 Cellar 目录中的二进制文件(Mac OS X 上的 /usr/local/Cellar)
- 卸载 pg gem
gem uninstall pg - 使用 Homebrew 配置重新安装
gem install pg -- --with-pg-config=/usr/local/bin/pg_config(如果您使用 pg setup 创建了一个 rails 项目,这在您的 database.yml 配置文件中进行了解释)
And it worked!
它奏效了!
回答by Ahmed Samir Shahin
First, you will need to create your user manually in Postgres, while granting privilege of database creation (AKA createdb) for this user.
首先,您需要在 Postgres 中手动创建您的用户,同时为该用户授予数据库创建权限(AKA createdb)。
To do so, first, open Postgres shell prompt
为此,首先,打开 Postgres shell 提示符
$ sudo -u postgres psql
$ sudo -u postgres psql
Create your user
创建您的用户
postgres=# create role Your_DB_username with createdb login password 'YOUR_PASSWORD';
postgres=# create role Your_DB_username with createdb login password 'YOUR_PASSWORD';
Exit from Postgres shell
从 Postgres shell 退出
postgres=# \q
postgres=# \q
Do whatever db-related rake task:
做任何与数据库相关的 rake 任务:
$ rake db:create
$ rake db:create
And it will work!
它会起作用!
回答by Kevin Sherman
The answer from zquintana above worked for me with a few small caveats.
上面 zquintana 的答案对我有用,但有一些小警告。
My solution (using Homebrew):
我的解决方案(使用 Homebrew):
- If you have the gem installed
gem uninstall pg - Remove old copy of postgresql
brew uninstall postgresql - Re-install postgresql
brew install postgresql - The install notes mention:
- 如果你安装了 gem
gem uninstall pg - 删除旧的 postgresql 副本
brew uninstall postgresql - 重新安装postgresql
brew install postgresql - 安装说明提到:
To have launchd start postgresql at login:
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgentsThen to load postgresql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistOr, if you don't want/need launchctl, you can just run:
postgres -D /usr/local/var/postgres
要在登录时启动 postgresql:
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents然后现在加载 postgresql:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist或者,如果您不想要/不需要launchctl,您可以运行:
postgres -D /usr/local/var/postgres
- So run
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents - Then
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist Now re-install the gem with the Homebrew configs
gem install pg -- --with-pg-config=/usr/local/bin/pg_configNow run your
rake db:create
- 所以运行
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents - 然后
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist 现在使用 Homebrew 配置重新安装 gem
gem install pg -- --with-pg-config=/usr/local/bin/pg_config现在运行你的
rake db:create
回答by przemek
In my case this was all I needed: https://dba.stackexchange.com/a/75221
就我而言,这就是我所需要的:https: //dba.stackexchange.com/a/75221
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
回答by tongamite
I encountered an identical issue and was able to solve the error by:
我遇到了相同的问题,并能够通过以下方式解决错误:
- using postgresapp.com (recommended by heroku in https://devcenter.heroku.com/articles/heroku-postgresql#local-setup),
adding to config/database.yml
host: localhostresetting shared memory settings as recommended in troubleshooting section of http://postgresapp.com/documentation:
sudo sysctl -w kern.sysv.shmall=65536 sudo sysctl -w kern.sysv.shmmax=16777216
- 使用 postgresapp.com(heroku 在https://devcenter.heroku.com/articles/heroku-postgresql#local-setup 中推荐),
添加到 config/database.yml
host: localhost按照http://postgresapp.com/documentation 的故障排除部分中的建议重置共享内存设置:
sudo sysctl -w kern.sysv.shmall=65536 sudo sysctl -w kern.sysv.shmmax=16777216
回答by gabocalero
Also check you don't have an open connection such as a client or an application connected to the instance. If that happen you will see this in the error
还要检查您没有打开的连接,例如客户端或连接到实例的应用程序。如果发生这种情况,您将在错误中看到这一点
Couldn't create database for {"adapter"=>"xxxx", "database"=>"xxxx", "host"=>"localhost", "username"=>"postgres", "password"=>"xxxxx", "pool"=>5, "timeout"=>5000}
rake aborted!
ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: source database "template1" is being accessed by other users
DETAIL: There is 1 other session using the database.
回答by zero_cool
I was able to solve this by making sure that the name of my database in the database.yml file was in the following format: appname_development, appname_test, and appname_production. Here is my database.yml file as an example:
我能够通过确保 database.yml 文件中我的数据库名称采用以下格式来解决这个问题:appname_development、appname_test 和 appname_production。这里以我的 database.yml 文件为例:
development:
adapter: postgresql
database: parallax_development
username:
password:
test:
adapter: postgresql
database: parallax_test
username:
password:
production:
adapter: postgresql
database: parallax_production
username:
password:
回答by Bilal Abbas
Simple add host: localhostto your database.yml
简单添加host: localhost到您的 database.yml
For more detail please visit rake db:create:all fails to connect to PostgreSQL database
有关更多详细信息,请访问rake db:create:all failed to connect to PostgreSQL 数据库

