2011-08-17 50 views
16

目前我得到以下错误:在Windows上安装的Postgres为使用的Ruby-on-Rails的

PGError (FATAL: password authentication failed for user "postgres"):

当我的应用程序试图访问数据库

我想测试我的SQL调用对抗postgres作为我的应用程序常规休息时推动生产在Heroku上,因为postgres(我认为这可能是一个健康的事情)对sqlite 3的更严格的要求。所以我有一个类似的请求to this为安装postgres用于在轨道上的红宝石(7)请不要过时教程。我认为这将是一个快20分钟的下载和安装,但2和一个小时后,我觉得我还没有非常接近。到目前为止,我:

下载并安装的Postgres版本8.4.8-1 from here

设置我的环境变量使得(用户)路径为:C:\Ruby192\bin;C:\Program Files (x86)\PostgreSQL\8.4\bin

的Gemfile:

gem 'pg', '0.11.0' # instead of gem 'sqlite3', '1.3.3' 

bundle install为我的rails应用程序似乎成功,但还没有找到简单的方法来验证安装。

集的database.yml as suggested here到:

development: 
    adapter: postgresql 
    database: db/development 
    username: postgres 
    password: secret 
    host: localhost 
    encoding: UTF8 
    pool: 5 
    timeout: 5000 

我知道我需要set up a user name and password for Postgresmaybe also start the postgres server, connect to it(?),放在我的本地IP地址,我将连接到它into a config files somewhere,然后编辑其他的.conf之一文件在'C:\ Program Files文件(x86)\ PostgreSQL \ 8.4 \数据'等...

我觉得Rails让我变得柔软,我是在思考事情还是它实际上是相当棘手的设置和我应该回到Sqlite3,为此还有非常有用的SQLite Manager,Firefox插件?

我还在寻找一个初学者指南,安装和使用的Postgres的轨道,但到目前为止只得到了大部分的东西,我看糊涂/尝试以下类似thisthisthisthisthis(用于Snow Leopard),this(linux)。

任何指针将不胜感激。谢谢!

詹姆斯

+0

我只是从HTTPS安装PostgreSQL的://postgrespro.com/windows,所有其他设置 - 常用的方法。 – prograils

回答

67

一种在Windows 7上安装Postgres以用作Rail 3(3.0.7)项目的PostgreSQL数据库的方法。


序言(你可以跳过此位)

所以要指出的第一件事是,Postgres的不只是从.sqlite3文件扩展名不同,它是一个整体的管理机制你的数据库。因此,它有一个客户端/服务器模型,其中您需要设置为使用Postgres作为您的Rails应用程序的数据库。

Postgres设置与几乎毫不费力的sqlite设置相比经历了相当大的痛苦:如果你部署到Heroku,他们目前使用Postgres,所以你使用Postgres时sqlite3上的一些SQL调用会中断。在本地调试postgres比在Heroku的服务器上调试要容易得多。

所以我做了以下事情: (免责声明:我可能忘记包括我所做的一些事情......我花了48个多小时的痛苦才开始工作...... if下面的建议对你不起作用,然后巨大的(2300页!!),但very thorough Postgres documentation应该有帮助。如果你认真使用Postgres,我建议下载这个,因为它有很多材料,我只有(第二个免责声明:我几乎可以肯定地打破了20个明智的Postgres准则并暴露了Postgres数据库中的安全漏洞,如果有经验的Postgres用户不同意任何明显的事情,请编辑我的)


。步骤1.下载,然后从here因为here说,只有9.0.x将在Windows 7支持我保持所有默认选项,只用于“秘密”作为密码安装PostgreSQL v9.0.4-1当Postgres的安装人员提示你时(我不确定在互联网上共享这些信息的后果是什么......很快就会发现我确信)。你会在步骤需要使用此密码3.

。步骤2.更改环境变量,使得路径(for system, not user(我不知道这是显著与否))为:C:\Program Files\PostgreSQL\9.0\bin
(注:我因此它不会被安装在'C:\ Program Files(x86)\ PostgreS ...'中的32位中)'

不要忘记将访问权限更改为文件夹PostgreSQL \ 9.0并删除文件夹或内容的所有默认只读权限。 (您可能还需要重新启动计算机才能生效 - 感谢@Gavin - 尽管不太可能)。

。步骤3.测试Postgres的安装,试图创建一个新的数据库: 从命令行:createdb -U postgres mydb_as_postgres。 现在应该提示你输入密码,如果你不是,可能需要先启动服务器(我不记得是否需要这样做)。最简单的方法是通过pgAdmin III,它应该是位于C:\Program Files\PostgreSQL\9.0\bin之类的文件夹中的“pgAdmin3.exe”。一旦你开始pgAdmin III,左侧应该有一个名为“对象浏览器”的面板。在此应该有一棵树:

服务器组>服务器> PostgreSQL 9。0(localhost:5432)

右键单击'PostgreSQL 9.0(localhost:5432)'并选择'连接'。

createdb -U postgres mydb_as_postgres命令应创建一个名为'mydb_as_postgres'的新数据库,您可以通过启动pgAdmin III并双击'PostgreSQL 9.0(localhost:5432)'来检查该数据库。在这里面应该是:

Databases (2)这应该列出2个数据库称为mydb_as_postgrespostgres

我把它叫做_as_postgres,因为该命令的-U postgres部分告诉Postgres的创建与Postgres的用户数据库作为它的主人,这您需要指定何时未以postgres用户身份登录。我将所有的文件都存储为'AJames'用户,但如果您是相同的,并且希望继续开发您的应用程序,并以不同的用户身份登录时,您需要为该用户创建一个Postgres'角色'(请参阅步骤4)。

。步骤4通过pgAdmin III。右键单击登录角色(这对我来说是):

对象浏览器>服务器组>服务器>的PostgreSQL 9.0(本地主机:5432)>登录角色

右键单击登录角色并选择“新建登录角色...' 在角色名称中,放入您的操作系统用户名,对我来说是AJames, 并在'角色权限'选项卡下填写您的密码,我检查了所有框,但是有经验的postgres用户可能会强烈建议只检查'从父角色继承权限'和'可以创建数据库对象'但我不是一个有经验的用户,只是想在Postgres中调试Rails SQL调用,所以我也检查了'超级用户'和“可以创建角色”,以防万一。

。步骤5.您现在应该可以创建新的数据库,而无需以postgres用户身份登录。试着输入:

createdb mydb_as_user

这应该可以为你工作。

。步骤6.好的,所以你的rails'db /'目录下有一个development.sqlite3文件。最初我将设置下一个测试,将其从sqlite3转换为psql。
虽然我无法得到这个工作,但我留下了我的尝试,因为我使用的解决方案需要在Heroku.com上的Rails应用程序中使用数据(请参阅第7步之后的解决方案)。对于那些只有本地应用且Heroku中没有数据的用户,他们不能使用相同的方法,因此他们可能需要探索如下内容:

x6.1首先,通过尝试命令测试'psql'从喜欢你的命令行:

psql mydb_as_user

这应该显示类似下面(您以后在您输入密码):

C:>psql mydb_as_user 
Password: 
psql (9.0.4) 
WARNING: Console code page (850) differs from Windows code page (1252) 
     8-bit characters might not work correctly. See psql reference 
     page "Notes for Windows users" for details. 
Type "help" for help. 

mydb5=# 

5233。2尝试输入:

CREATE TABLE users_table (id integer, "name" text);

它应该显示:

CREATE TABLE 
mydb5=# 

如果你的pgAdmin III检查,你应该看到桌子上有下:

对象浏览器>服务器组>服务器> PostgreSQL 9.0(localhost:5432)>数据库> mydb_as_user> Schema> public> Tables> users_table>

x6.3好吧,紧跟t ry转换。 Downloaded sqlite-shell Windows预编译二进制文件。
x6.4创建一个新目录,我使用'C:\ temp'并将sqlite3.exe和您的development.sqlite3文件放入其中。
x6.5使用以下命令(这些命令来自here)将development.sqlite3数据库转储到Postgres中。

sqlite3 development .dump | psql development2

你可能会得到这样的错误:让我去到的pgAdmin III,并提出了发展2数据库,再次试图命令并得到

psql: FATAL: database "development2" does not exist

x6.6:

ERROR: syntax error at or near "PRAGMA" 
LINE 1: PRAGMA foreign_keys=OFF; 
     ^
BEGIN 
COMMIT 

就像我说的,我无法得到它的工作。我确信有一种方法可以避免这种错误,但我想到了一种不同的方式,所以我使用了这种解决方案(它需要一个Heroku帐户来获取您的数据,并使用Taps gem(I)执行从sqlite3到psql的转换。相信):

步骤7.在pgAdmin III中我创建了另一个数据库,在属性选项卡下我设置了name:'development',owner:'AJames'(用你自己的Windows用户名替换它)。权限选项卡下,设置角色:“公共”和检查(认为这重置为未选中状态,所以我不知道这是必要的)ALL选项

。步骤8添加 。 10 到你的宝石文件。在这一点上,你可能也想删除: gem 'sqlite3'

。步骤9.集的database.yml为suggested here到:

development: 
    adapter: postgresql 
    database: db/development 
    username: AJames # replace this with your own user name 
    password: secret # replace this with your own password 
    host: localhost 
    encoding: UTF8 
    pool: 5 
    timeout: 5000 

如果您正在使用一个开源的项目,并不希望被公之于众您的密码,看看在某些Securely providing the database password in a Rails app的答案。

。步骤10.在命令行中你的Rails应用程序的根目录下运行: rake db:migrate 这将创建一个新的架构和Postgres数据库中的所有表。

。步骤11。从您的命令行运行heroku db:pull(再次从您的rails应用程序的根目录中)将您的所有数据拉下并放入新的空Postgres数据库。我认为在这一点上你的水龙头宝石将为你做这项工作。


。步骤12.希望没有步骤12! ...现在它应该为你工作。快乐的RoR PostgreSQL调试!请编辑或让我知道,如果有任何错误。

而且,这里有更多的东西的清单,可能是有趣/有用:

+1

只是想补充说,在步骤2中更改环境变量后,您需要重新启动计算机。注销并返回可能也会起作用,但无论如何我需要重新启动,所以这就是我所做的。 – Gavin

+2

真棒帖子。帮助我了很多:) – Ajay

+0

我在Windows 7 64x和Rails 4.2.4上运行Postgres 9.5,这工作正常 – Matthias

2

你的链接都不似乎是(可以说)最有用的文档 - official PostgreSQL的文档。我最近使用这些文档和these组合了postgresql和django来配置一个Linux Mint盒子,尽管后者特定于Linux。

我担心更多关于确认事情的postgresql方面,而不是关于rails。也就是说,你的问题应该是“我如何在Windows 7上设置和测试postgresql服务器”,而不是你需要知道如何将它锁定在rails中。

编辑: 也许this也可能对您有用 - 官方postgresql维基与详细的安装指南。

祝你好运!

+0

谢谢里诺。这些链接看起来好像是一个更好的方向。我会回头看看我如何继续。 (很好,http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#What_versions_of_Windows_does_PostgreSQL_run_on.3F已经告诉我,我有错误版本的postgres,因为8.4在Windows 7之前发布了......感谢Reno!:)) – AJP

+0

很高兴我能帮上忙! – Reno

2

从AJP的答案是正确的只有一个小的重新配置。 该行

database: db/development 

不适用于我。 我

database: development 

我用这个Ruby on Rails的该命令将其更改为

rake db:create 

rake db:migrate 

工作