rails 3 postgreSQL基本'数据库不存在'

sam*_*452 10 postgresql ruby-on-rails ruby-on-rails-3

好的,我正在构建我的第一个rails 3.0应用程序,并希望在我的开发机器(运行10.6)上测试postgreSQL服务器作为生产.当您创建新应用程序并rake db:migrate时,它会为所有三种环境创建sqlite db.凉.现在我想学习如何转向生产和使用postgres.我用自制软件来安装postgres,安装了pg (env ARCHFLAGS="-arch x86_64" gem install pg)postgres-pr gems.

我运行rake db:migrate希望与sqlite3一样,它会自动构建我的生产服务器,因为我已经更新了我的database.yml(见下文).

好的,在我的应用程序的文件夹中,我使用' rails s --environment=production' 重新启动服务器,它说它无法找到我的生产数据库.

所以谷歌搜索'rails 3 postgres install'让我走得这么远,但我似乎错过了一些东西,因为rails无法创建新的pg数据库.

postgres正在运行,由ps决定.

createdb -Omysuperusername -Eutf8 vitae_production
createdb -Omysuperusername -Eutf8 /Users/sam/apps/vitae/db/vitae_production
Run Code Online (Sandbox Code Playgroud)

但是这个目录没有这个数据库所以我错过了什么.我在俯瞰什么?

这是我的database.yml片段:

production:
  adapter: postgresql
  host: localhost
  database: db/vitae_production
  pool: 5
  timeout: 5000
  username: mysuperusername
  password:
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 13

这里有几件事情要发生.首先,您似乎将SQLite和PostgreSQL格式混合database:在您的设置中database.yml.使用SQLite,您可以使用以下命令指定SQLite数据库文件的相对路径:

database: db/vitae_production.sqlite
Run Code Online (Sandbox Code Playgroud)

但是使用PostgreSQL,您可以使用以下内容指定数据库名称:

development:
  database: vitae_development
  username: rails
  ...
Run Code Online (Sandbox Code Playgroud)

然后,一旦database.yml设置完毕,您将从内部创建数据库用户(如果需要)psql:

psql> create role rails login;
Run Code Online (Sandbox Code Playgroud)

然后让Rails创建数据库:

$ rake db:create
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够运行迁移来创建初始表并离开.

您可能希望阅读create role文档以确保获得正确的选项.您可能希望在开发环境而不是生产环境中工作,因此我更改了名称和YAML以反映这一点,生产用于部署,我认为您尚未部署任何内容.