2011-08-17 63 views
16

Actualmente me sale el siguiente error:Instalación de PostgreSQL en Windows para su uso con Ruby-on-Rails

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

cuando mi aplicación intenta acceder a la base de datos.

Quería probar mis llamadas SQL en contra de postgres ya que mi aplicación se rompe de forma regular cuando se sube a producción en Heroku debido a los requisitos más estrictos de postgres (que creo que es algo saludable) sobre sqlite 3. Entonces tengo una solicitud similar to this para un tutorial no desactualizado para instalar postgres para usar con ruby ​​on rails en windows (7) por favor. Pensé que serían unos 20 minutos rápidos de descarga e instalación, pero 2 y un par de horas más tarde y no creo que esté muy cerca todavía. Hasta ahora he:

descargado e instalado Postgres Versión 8.4.8-1 from here

Establecer mi variables de entorno de tal manera que el camino (para el usuario) es: C:\Ruby192\bin;C:\Program Files (x86)\PostgreSQL\8.4\bin

Gemfile:

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

funcionó bundle install para mi aplicación de rieles aparentemente con éxito, pero todavía no he encontrado una manera fácil de validar la instalación.

conjunto database.yml as suggested here a:

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

Yo sé que tengo que set up a user name and password for Postgres, maybe also start the postgres server, connect to it(?) y poner en mi dirección IP local que voy a conectar con él en into a config files somewhere y luego editar una de la otra .conf archivos en 'C: \ Archivos de programa (x86) \ PostgreSQL \ 8.4 \ data' etc ...

Creo que Rails me ha suavizado, ¿estoy pensando cosas o es realmente bastante complicado de configurar y ¿Debería regresar a Sqlite3, para el cual también está el asombrosamente útil SQLite Manager, el complemento de Firefox?

Todavía estoy en busca de una guía para principiantes a la instalación y uso de Postgres para los carriles pero hasta ahora sólo se han confundido por la mayoría de las cosas que miro/intentado siguiente como this, this, this, this, this (por Snow Leopard), this (linux).

Cualquier puntero sería muy apreciado. ¡Gracias!

James

+0

simplemente he instalado PostgreSQL desde https : //postgrespro.com/windows, todas las demás configuraciones: la forma más común. – prograils

Respuesta

67

Un enfoque para instalar Postgres en Windows 7 para usar como base de datos PostgreSQL para un proyecto de rieles 3 (3.0.7).


Preámbulo (puede omitir este bit)

Así que la primera cosa a destacar es que Postgres no es sólo una extensión de archivo diferente de .sqlite3, es todo un mecanismo de gestión de bases de datos . Como tal, tiene un modelo cliente/servidor, del cual deberá configurar ambos para usar Postgres como base de datos para su aplicación de rieles.

Motivo para superar la configuración de Postgres frente a la configuración sqlite casi sin esfuerzo: si está implementando en Heroku, actualmente están utilizando Postgres para que algunas de sus llamadas SQL que están bien en sqlite3 se rompan cuando se usan con Postgres . Es mucho más fácil depurar postgres localmente que cuando está en los servidores de Heroku.

Así que hice las siguientes cosas: (Descargo de responsabilidad: puede que me haya olvidado de incluir algunas de las cosas que hice ... me tomó más de 48 horas de esfuerzo para que funcionase ... si el siguiente consejo no funciona para usted, entonces el enorme (¡2300 páginas!) pero very thorough Postgres documentation debería ayudar. Recomiendo descargar esto de todos modos si realmente quiere usar Postgres, ya que tiene un montón de material que solo he usado. recién empecé a comprender el significado de.) (Segundo descargo de responsabilidad: casi seguro que he roto 20 pautas sensatas de Postgres y agujeros de seguridad expuestos en la base de datos de Postgres al hacerlo. Si hay alguna cosa obvia con la que un usuario experimentado de Postgres no esté de acuerdo, edite mi publicación)


Etapa 1. Descargar e instalar PostgreSQL v9.0.4-1 de here porque here única 9.0.x sería compatible con Windows 7. dijo Seguí todas las opciones por defecto y 'secreto' solo se utiliza como contraseña cuando el instalador de Postgres lo solicite (de nuevo no estoy del todo seguro de cuáles son las consecuencias de compartir esa información en Internet ... pronto sabré que estoy seguro). Usted necesitará esta contraseña en el paso 3.

Etapa 2. variables de cambiar el medio ambiente de tal manera que la trayectoria (for system, not user (no estoy seguro si esto es o no significativo)) es: C:\Program Files\PostgreSQL\9.0\bin
(NB I Estoy en las ventanas de 64 bits por lo que no se instala para 32 bits en 'C: \ Archivos de programa (x86) \ PostgreS ...')

No olvides cambiar los derechos de acceso a la carpeta PostgreSQL \ 9.0 y elimine cualquier derecho de solo lectura predeterminado en la carpeta o el contenido. (También es posible que deba reiniciar su computadora para que esto surta efecto, gracias @Gavin, aunque no es probable).

Etapa 3. instalación de Postgres prueba al tratar de crear una nueva base de datos: Desde la línea de comandos: createdb -U postgres mydb_as_postgres. Se le debe pedir que ingrese la contraseña ahora; si no es así, es posible que deba iniciar el servidor primero (no recuerdo si necesité hacer esto o no). La forma más fácil es a través de pgAdmin III, que debe ser 'pgAdmin3.exe' en una carpeta en algún lugar como C:\Program Files\PostgreSQL\9.0\bin. Una vez que haya iniciado pgAdmin III, debe haber un panel a la izquierda llamado 'Object Browser'. En esto debería haber un árbol con:

Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost: 5432)

Haga clic con el botón derecho en 'PostgreSQL 9.0 (localhost: 5432)' y seleccione 'Conectar'.

El comando createdb -U postgres mydb_as_postgres debe crear un nuevo databse llamado 'mydb_as_postgres' que puede verificar activando pgAdmin III y haciendo doble clic en 'PostgreSQL 9.0 (localhost: 5432)'. Bajo este no debería ser:

Databases (2) que debe enumerar 2 bases de datos llamados mydb_as_postgres y postgres

lo llamé _as_postgres porque la parte -U postgres de la orden le dice Postgres para crear la base de datos con el usuario postgres ya que es propietario, el cual debe especificar cuándo no inició sesión como usuario de Postgres. Tengo todos mis archivos almacenados como usuario de 'AJames', así que si eres el mismo y quieres seguir desarrollando tu aplicación cuando inicias sesión como un usuario diferente, entonces necesitas crear una 'función' de Postgres para ese usuario (ver paso 4).

. Paso 4. A través de pgAdmin III. Haga clic en Roles Iniciar sesión (que para mí está en): Navegador

Objeto> Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost: 5432)> Login Roles

Haga clic en Roles de Usuario y seleccione 'Nuevo Función de inicio de sesión ... ' en Nombre del rol, ingrese el nombre de usuario de su sistema operativo, que para mí es AJames, y complete su contraseña en la pestaña' Derechos de función ', he marcado todos los cuadros, pero un usuario experimentado de postgres probablemente recomiendo comprobar solo 'hereda los derechos de los roles principales' y 'puede crear objetos de base de datos' Pero no soy un usuario experimentado y solo quiero depurar las llamadas SQL de Rails en Postgres, así que también revisé el 'Superusuario' y 'Puede crear roles', por las dudas.

. Paso 5. Ahora debería poder crear una nueva base de datos sin haber iniciado sesión como usuario de postgres. Pruebe a escribir:

createdb mydb_as_user

Esperamos que esto debería funcionar para usted.

. Paso 6. Bien, entonces tiene un archivo development.sqlite3 en el directorio 'db /' de su riel. Inicialmente iba a establecer la próxima prueba como convertir esto de sqlite3 a psql.
No pude hacer que esto funcione, pero dejé mis intentos aquí porque la solución que utilicé requería tener los datos en una aplicación de Rails en Heroku.com (ver la solución del paso 7 en adelante). Para aquellos que solo tienen una aplicación local y no tienen datos en Heroku, no pueden usar el mismo enfoque, por lo que es posible que necesiten explorar algo como esto:

x6.1 Primero, pruebe 'psql' intentando un comando desde la línea de comandos como:

psql mydb_as_user

esto debería mostrar algo parecido a continuación (después de que ha escrito en su contraseña):

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=# 

x6.Entrada de 2 intento:

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

Debe mostrar:

CREATE TABLE 
mydb5=# 

Si marca en pgAdmin III, debería ver la tabla existe en:

objeto de navegador> Grupos de servidores> Servidores > PostgreSQL 9.0 (host local: 5432)> Bases de datos> mydb_as_user> Esquemas> público> Tablas> tabla_de_usuarios>

x6.3 De acuerdo, junto a t la conversión Downloaded sqlite-shell binario precompilado para windows.
x6.4 Crear un nuevo directorio, utilicé 'C: \ temp' y coloque el archivo sqlite3.exe y sus archivos development.sqlite3 en él.
x6.5 Utilice los siguientes comandos (que son de here) para volcar la base de datos development.sqlite3 en Postgres.

sqlite3 development .dump | psql development2

es posible que obtenga un error como:

psql: FATAL: database "development2" does not exist

x6.6 así que entré en pgAdmin III e hice una base de datos de desarrollo 2, probado el comando de nuevo y tengo:

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

Como dije, no pude hacer que funcione. Estoy seguro de que hay una forma de eludir ese error, pero pensé en una forma diferente y en su lugar usé esta solución (que requiere una cuenta Heroku para tener sus datos y la conversión de sqlite3 a psql usando la gema Taps (I creen):

Etapa 7. en pgAdmin III creé otra base de datos en la pestaña propiedades puse nombre:. 'desarrollo', propietario:. '' (AJames sustituir esto con su propio nombre de usuario de Windows) Y bajo la etiqueta de privilegios, establecer el papel: 'público' y seleccionado la opción ALL (considera que la restablece a desmarcado así que no estoy seguro de que sea necesario)

Etapa 8. añadir . 10 a su archivo gema. Probablemente también desee eliminar el: gem 'sqlite3' en este punto también.

Etapa 9. conjunto database.yml como suggested here a:

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 

Si usted está trabajando en un proyecto de código abierto y no desea que su clave para ingresar a disposición del público, a echar un vistazo en algunas de las respuestas a Securely providing the database password in a Rails app.

Etapa 10. de línea de comandos en ejecución directorio raíz de su raíles de aplicación: rake db:migrate Esto creará el nuevo esquema y todas las tablas de la base de datos PostgreSQL.

. Paso 11. plazo heroku db:pull desde la línea de comandos (otra vez de en el directorio raíz de la aplicación de los carriles) para tirar de todos sus datos abajo y en su nueva base de datos PostgreSQL vacía. Creo que en este punto tu joya de taps hará este trabajo por ti.


Etapa 12. Con suerte no hay paso 12! ... y ahora debería estar funcionando para ti. ¡Eliminación feliz de RoR PostgreSQL! Edita o avísame si hay algún error al respecto.

Además, aquí es una lista de cosas adicionales que podría ser interesante/útil:

+1

Solo quería agregar que después de cambiar las variables de entorno en el Paso 2, deberá reiniciar su computadora. Desconectarse y volver a entrar probablemente también funcione, pero necesitaba un reinicio de todos modos, así que eso fue lo que hice. – Gavin

+2

Awesome post. me ayudó mucho :) – Ajay

+0

Estoy ejecutando Postgres 9.5 en Windows 7 64x y Rails 4.2.4 y esto funciona bien – Matthias

2

Ninguno de sus enlaces parecía ser el (posiblemente) la documentación más útil - los documentos official PostgreSQL. Recientemente configuré una caja de Linux Mint con postgresql y django usando una combinación de esos documentos y these, aunque estos últimos son específicos de Linux.

Me preocuparía más sobre la validación del lado postgresql de las cosas, menos sobre los rieles. Es decir, su pregunta debería ser "¿Cómo puedo configurar y probar un servidor postgresql en un cuadro de Windows 7?", Más de lo que necesita saber cómo bloquearlo en rieles.

Editar: Tal vez this también podría ser útil para usted - wiki postgresql oficial con guías de instalación detalladas.

¡Buena suerte!

+0

Gracias Reno. Esos enlaces parecen una dirección mucho mejor para entrar. Volveré a publicar cómo me siento. (Excelente, http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#What_versions_of_Windows_does_PostgreSQL_run_on.3F ya me ha dicho que tengo una versión incorrecta de postgres, ya que 8.4 fue lanzada antes de Windows 7 ... gracias Reno! :)) – AJP

+0

¡Me alegro de poder ayudar! – Reno

2

la respuesta de AJP es la correcta con solo una pequeña reconfiguración. La línea

database: db/development 

no funciona para mí. tengo que cambiarlo a

database: development 

lo uso para el rubí en los carriles para el comando

rake db:create 

y

rake db:migrate 

para trabajar

Cuestiones relacionadas