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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 03:27:04  来源:igfitidea点击:

In Rails, Couldn't create database for {"adapter"=>"postgresql",

ruby-on-railsruby-on-rails-3postgresql

提问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:createrake 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:

我通过执行以下操作解决了同样的问题:

  1. Make sure that all binaries are pointing to binaries in Cellar directory (/usr/local/Cellar on Mac OS X)
  2. Uninstall pg gem gem uninstall pg
  3. 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)
  1. 确保所有二进制文件都指向 Cellar 目录中的二进制文件(Mac OS X 上的 /usr/local/Cellar)
  2. 卸载 pg gem gem uninstall pg
  3. 使用 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):

  1. If you have the gem installed gem uninstall pg
  2. Remove old copy of postgresql brew uninstall postgresql
  3. Re-install postgresql brew install postgresql
  4. The install notes mention:
  1. 如果你安装了 gem gem uninstall pg
  2. 删除旧的 postgresql 副本 brew uninstall postgresql
  3. 重新安装postgresql brew install postgresql
  4. 安装说明提到:

To have launchd start postgresql at login:

ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents

Then to load postgresql now:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Or, 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

  1. So run ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  2. Then launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
  3. Now re-install the gem with the Homebrew configs gem install pg -- --with-pg-config=/usr/local/bin/pg_config

  4. Now run your rake db:create

  1. 所以运行 ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  2. 然后 launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
  3. 现在使用 Homebrew 配置重新安装 gem gem install pg -- --with-pg-config=/usr/local/bin/pg_config

  4. 现在运行你的 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:

我遇到了相同的问题,并能够通过以下方式解决错误:

  1. using postgresapp.com (recommended by heroku in https://devcenter.heroku.com/articles/heroku-postgresql#local-setup),
  2. adding to config/database.yml

    host: localhost
    
  3. resetting 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
    
  1. 使用 postgresapp.com(heroku 在https://devcenter.heroku.com/articles/heroku-postgresql#local-setup 中推荐),
  2. 添加到 config/database.yml

    host: localhost
    
  3. 按照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 数据库