在Windows上安装Postgres以与Ruby-on-Rails一起使用

AJP*_*AJP 19 windows postgresql install ruby-on-rails ruby-on-rails-3

目前我收到以下错误:

PGError(致命:用户"postgres"的密码验证失败):

当我的应用程序尝试访问数据库时.

我希望测试我的针对postgres的SQL调用,因为我的应用程序经常在Heroku上推送到生产时因为postgres的更严格的要求(我认为这可能是一个健康的东西)而不是sqlite 3.所以我对此有类似的请求如果没有过时的教程,请安装postgres,以便在windows(7)上使用ruby on rails.我认为这是一个快速的20分钟下载和安装,但2小时后,我不认为我非常接近.到目前为止,我已经:

从这里下载并安装Postgres版本8.4.8-1

设置我的环境变量,使Path(for User)为: C:\Ruby192\bin;C:\Program Files (x86)\PostgreSQL\8.4\bin

的Gemfile:

gem 'pg', '0.11.0'  # instead of gem 'sqlite3', '1.3.3'
Run Code Online (Sandbox Code Playgroud)

跑了bundle install我的Rails应用程序看似成功,但还没有找到简单的方法来验证安装呢.

按照此处的建议设置database.yml :

development:
  adapter: postgresql
  database: db/development
  username: postgres
  password: secret
  host: localhost
  encoding: UTF8
  pool: 5
  timeout: 5000
Run Code Online (Sandbox Code Playgroud)

我知道我需要为Postgres设置一个用户名和密码,也可以启动postgres服务器,连接到它(?)并输入我的本地IP地址我将连接到它上面的某个配置文件,然后编辑'C:\ Program Files(x86)\ PostgreSQL\8.4\data'等中的其他.conf文件之一...

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

我还在寻找一个初学者指南,安装和使用的Postgres的轨道,但到目前为止只得到了大部分的东西,我看糊涂/试过下面像这个,这个,这个,这个,这个(雪豹)(linux).

任何指针都将非常感激.谢谢!

詹姆士

AJP*_*AJP 72

在Windows 7上安装Postgres的方法,用作rails 3(3.0.7)项目的PostgreSQL数据库.


序言(你可以跳过这一点)

所以首先要指出的是Postgres不仅仅是.sqlite3的不同文件扩展名,它是管理数据库的完整机制.因此它有一个客户端/服务器模型,您需要将其设置为使用Postgres作为rails应用程序的数据库.

经历了Postgres设置的相当大的痛苦与几乎毫不费力的sqlite设置的动机:如果你正在部署到Heroku,他们目前正在使用Postgres,因此当与Postgres一起使用时,一些在sqlite3上正常运行的SQL调用将会中断.在本地调试postgres要容易得多,而不是在Heroku的服务器上调试postgres.

所以我做了以下事情:(免责声明:我可能忘了包括我做过的一些事情......我花了48个多小时的时间来开始工作......如果以下建议没有为你工作然后巨大的(2300页!!)但非常彻底的Postgres文档应该有所帮助.如果你认真使用Postgres,我建议你下载它,因为它有很多材料,我才刚刚开始理解其重要性.)(第二个免责声明:我几乎肯定会破坏20个明智的Postgres指南并在Postgres数据库中暴露出安全漏洞.如果有经验丰富的Postgres用户不同意,请编辑我的帖子.)


.步骤1.这里下载并安装PostgreSQL v9.0.4-1,因为这里说Windows 7上只支持9.0.x. 我保留了所有默认选项,并在Postgres安装程序提示时使用'secret'作为密码对于一个人(再次不完全确定在互联网上分享这些信息的后果是......很快就会发现我确定).您将在步骤3中使用此密码.

.步骤2.更改环境变量,使得Path(对于系统,而不是用户(我不确定这是否重要))是:( C:\Program Files\PostgreSQL\9.0\bin
nb我在64位窗口上因此它没有被安装为32-位于'C:\ Program Files(x86)\ PostgreS ...')

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

.步骤3.尝试创建新数据库来测试Postgres安装:从命令行:createdb -U postgres mydb_as_postgres.现在应该提示您输入密码,如果不是,则可能需要首先启动服务器(我不记得是否需要这样做).最简单的方法是通过pgAdmin III,它应该是某个文件夹中的'pgAdmin3.exe' C:\Program Files\PostgreSQL\9.0\bin.一旦你开始使用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_postgres和的数据库postgres

我调用它_as_postgres是因为-U postgres命令的一部分告诉Postgres用postgres用户创建数据库作为它的所有者,当你没有以postgres用户身份登录时需要指定它.我将所有文件存储为"AJames"用户,但如果您是相同的并且希望在以其他用户身份登录时继续开发您的应用,则需要为该用户创建Postgres'角色'(请参阅步骤4).

.步骤4.通过pgAdmin III.右键单击Login Roles(对我而言):

对象浏览器>服务器组>服务器> PostgreSQL 9.0(localhost:5432)>登录角色

右键单击Login Roles并在Role name中选择'New Login Role ...',输入您的操作系统用户名,对我来说是AJames,并在'Role Privileges'选项卡下填写您的密码,我检查了所有盒子,但经验丰富的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=# 
Run Code Online (Sandbox Code Playgroud)

x6.2尝试输入:

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

它应该显示:

CREATE TABLE
mydb5=#
Run Code Online (Sandbox Code Playgroud)

如果你签入pgAdmin III,你应该看到下面的表格:

对象浏览器>服务器组>服务器> PostgreSQL 9.0(localhost:5432)>数据库> mydb_as_user>架构>公共>表> users_table>

x6.3好的,接下来尝试转换. 为Windows 下载sqlite-shell预编译二进制文件.
x6.4创建一个新目录,我使用'C:\ temp'并将sqlite3.exe和你的development.sqlite3文件放入其中.
x6.5使用以下命令(来自此处)将development.sqlite3数据库转储到Postgres中.

sqlite3 development .dump | psql development2

您可能会收到如下错误:

psql: FATAL: database "development2" does not exist

x6.6所以我进入pgAdmin III并制作了一个开发2数据库,再次尝试了命令并获得:

ERROR:  syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
        ^
BEGIN
COMMIT
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,我无法让它发挥作用.我确信有一种方法来解决这个错误,但我想到了一个不同的方式,所以我改为使用这个解决方案(这需要一个Heroku帐户来获取你的数据并使用Taps gem从sqlite3到psql的转换(我相信):

.步骤7.在pgAdmin III中我创建了另一个数据库.在属性选项卡下,我设置名称:'development',owner:'AJames'(用您自己的Windows用户名替换它).在特权选项卡下,设置角色:'public'并检查ALL选项(认为此重置为未选中,因此我不确定是否有必要).

.步骤8.添加 gem 'pg', '0.11.0' 到您的gem文件.你可能也想删除: gem 'sqlite3' 此时也是如此.

.步骤9.按照此处的建议设置database.yml :

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
Run Code Online (Sandbox Code Playgroud)

如果您正在开发一个开源项目并且不希望您的密码公开,请查看在Rails应用程序中安全地提供数据库密码的一些答案.

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

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


.步骤12. 希望没有第12步!......它现在应该适合你.快乐的RoR PostgreSQL调试!如果有任何错误,请编辑或告诉我.

此外,这里有一些可能有趣/有用的其他内容:

  • 很棒的帖子.帮了我很多:) (2认同)