Rake db:setup或rake db:create应用错误的用户名/错误的数据库

时间:2015-07-23 18:21:27

标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord rake

使用Mac OSX Yosemite(10.10.4):

rails -v => Rails 4.2.3

ruby -v => ruby 2.2.2p95

遵循这些说明的组合: https://www.digitalocean.com/community/tutorials/how-to-setup-ruby-on-rails-with-postgres 和这些说明: http://blog.endpoint.com/2014/03/setup-rails-environment-with-postgresql.html

bash:

$createuser -P -d -e project (This was successful)
$password: aPassword
$re-enter password: aPassword
$rails new project --database=postgresql
$cd project/config/database.yml

这是config / database.yml:

default: &default
  adapter: postgresql
  encoding: unicode

  username: bespoke
  password: <%= ENV['PROJECT_DATABASE_PASSWORD'] %>
  #if I type env in bash => PROJECT_DATABASE_PROJECT: aPassword
  pool: 5

development:
  <<: *default
  database: Project_development

test:
  <<: *default
  database: Project_test

到目前为止一切都那么好......但随后:

rake db:create第一次: myusername already exists 第二次:rake db:setup我相信他们应该是同样的事情......

myusername already exists
Project_test already exists

/Users/myusername/Challenges/Project/db/schema.rb doesn't exist yet. Run `rake db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter /Users/myusername/Challenges/Project/config/application.rb to limit the frameworks that will be loaded.

所以换句话说问题是:rake db:createrake db:setup似乎完全相同,能够创建表Project_test,因此他们说Project_test已经创建......但是他们拒绝创建表格Project_development,而是坚持让我使用未列出的表格myusername〜!

我尝试删除默认设置并将其硬编码到开发中无济于事。顺便说一下,这里是psql =&gt;的输出。 /list

                                 List of databases
     Name     |  Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
--------------+---------+----------+-------------+-------------+-------------------
 Project_test | project | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres     | mee     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myusername   | mee     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

这证明它确实创建了测试数据库并使用了正确的所有者/用户,但它拒绝创建开发数据库。

我做错了什么或者我应该问他们的github问题?

1 个答案:

答案 0 :(得分:2)

解决!这是一个环境变量。首先,我使用env查看所有变量并注意到设置了DATABASE_URL。

$env
...
DATABASE_URL=postgres:///steve
...

所以我想,也许环境变量优先于<appname>_development(但在生成<appname>_test时未应用) 然后,我查看了我的.zshrc文件,看到了这个值的设置位置:

➜  ~  cat .zshrc
# Added by Steve for permanent path vars
 export DATABASE_URL=postgres:///$(whoami)

一旦我注释掉了这个导出行,然后重新加载/重新启动了shell,运行rake db:create就会生成<appname>_development

我不记得为什么我需要设置默认值但我很高兴我在配置文件中做了一个注释,可能遵循通过命令行使用postgres客户端的指南。 希望能帮助别人