Rails 3 PostgreSQL基础:“数据库不存在”

10

好的,我正在构建我的第一个Rails 3.0应用程序,并希望在开发机器(运行10.6的机器)上将postgreSQL服务器作为生产环境进行测试。当您创建一个新应用并运行rake db:migrate时,它会为所有三个环境创建sqlite数据库。很不错。现在我想学习如何移至生产环境并使用postgres。我已经使用homebrew安装了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

但是这个目录并没有这个数据库,所以我漏掉了什么。我忽略了什么?

这是我的database.yml片段:

production:
  adapter: postgresql
  host: localhost
  database: db/vitae_production
  pool: 5
  timeout: 5000
  username: mysuperusername
  password:
2个回答

15

这里有几件事情需要注意。首先,您似乎正在混淆SQLite和PostgreSQL格式的database:设置。对于SQLite,您需要使用以下内容指定相对路径到SQLite数据库文件

database: db/vitae_production.sqlite

但是使用PostgreSQL时,您需要像这样指定数据库名称:specify the database name
development:
  database: vitae_development
  username: rails
  ...

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

psql> create role rails login;

然后让Rails创建数据库

$ rake db:create

那么,您应该能够运行迁移以创建初始表格,然后就可以开始了。

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


4
我不熟悉Rails,但您可以将数据库创建为postgres超级用户,然后授予权限,假设在您的Linux发行版中,postgres超级用户是postgres:
su root
su postgres
createdb vitae_production

接下来在PostgreSQL中授予权限给另一个用户

psql
CREATE USER rails WITH PASSWORD 'myPassword';
GRANT ALL PRIVILEGES ON DATABASE vitae_production TO rails;
ALTER DATABASE vitae_production OWNER TO rails;

如果您的配置文件应该如下所示:

然后您的配置文件应该像这样:

production:
  adapter: postgresql
  host: localhost
  database: vitae_production
  pool: 5
  timeout: 5000
  username: rails
  password: myPassword

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接