2011-04-28 9 views
45

estoy importando un proyecto de carriles existente que yo estaba trabajando en mi nuevo sistema en Arch Linux, que ya ha instalado todas las gemas y PostgreSQL correctamente, pero tiene algunos problemas cuando runing:rake db: crear error de codificación con PostgreSQL

rake db:create 

me sale el siguiente error

PGError: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) 
HINT: Use the same encoding as in the template database, or use template0 as template. 
: CREATE DATABASE "System_test" ENCODING = 'unicode' 

creé manualmente la base de datos con la codificación correcta y las migraciones funcionó bien, pero puedo ejecutar el

rake db:test:clone 

comando porque intenta crear una base de datos y no creo que cree manualmente las bases de datos tampoco. Entonces, alguien sabe arreglar esto?

saludos

EDIT: Aquí está mi database.yml

development: 
    adapter: postgresql 
    encoding: unicode 
    database: System_development 
    pool: 5 
    username: forellana 
    password: 

test: &test 
    adapter: postgresql 
    encoding: unicode 
    database: System_test 
    pool: 5 
    username: forellana 
    password: 

cucumber: 
    <<: *test 

y aquí está la salida completa del comando

(in /home/fespinoza/Workspace/TLI) 
PGError: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) 
HINT: Use the same encoding as in the template database, or use template0 as template. 
: CREATE DATABASE "System_test" ENCODING = 'unicode' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `rescue in log' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:199:in `log' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:493:in `execute' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:572:in `create_database' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/railties/databases.rake:92:in `rescue in create_database' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/railties/databases.rake:39:in `create_database' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/railties/databases.rake:33:in `block (2 levels) in <top (required)>' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:636:in `block in execute' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:631:in `each' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:631:in `execute' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:597:in `block in invoke_with_call_chain' 
/home/fespinoza/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:583:in `invoke' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2029:in `block (2 levels) in top_level' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2029:in `each' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2029:in `block in top_level' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2001:in `block in run' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/bin/rake:31:in `<top (required)>' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/bin/rake:19:in `load' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/bin/rake:19:in `<main>' 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"System_test", "pool"=>5, "username"=>"forellana", "password"=>nil} 
PGError: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) 
HINT: Use the same encoding as in the template database, or use template0 as template. 
: CREATE DATABASE "System_development" ENCODING = 'unicode' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `rescue in log' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:199:in `log' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:493:in `execute' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:572:in `create_database' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/railties/databases.rake:92:in `rescue in create_database' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/railties/databases.rake:39:in `create_database' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.0.5/lib/active_record/railties/databases.rake:35:in `block (2 levels) in <top (required)>' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:636:in `block in execute' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:631:in `each' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:631:in `execute' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:597:in `block in invoke_with_call_chain' 
/home/fespinoza/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:583:in `invoke' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2029:in `block (2 levels) in top_level' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2029:in `each' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2029:in `block in top_level' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2001:in `block in run' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/bin/rake:31:in `<top (required)>' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/bin/rake:19:in `load' 
/home/fespinoza/.rvm/gems/ruby-1.9.2-p180/bin/rake:19:in `<main>' 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"System_development", "pool"=>5, "username"=>"forellana", "password"=>nil} 
+0

¿Cuál es su archivo database.yml parece? –

+0

¿Cómo instaló Postgresql en su sistema? ¿Fue de la fuente o de un paquete? ¿A qué se parece la salida de 'psql --command =" \ l "'? –

Respuesta

26

El principal problema aquí es que su base de datos de plantilla (template1) ha sido creado con una codificación ASCII y le está diciendo a PostgreSQL que cree la nueva base de datos con codificación UTF8. No hace falta decir que no está particularmente satisfecho con eso. Lo que puede hacer es borrar su base de datos template1 y volver a crearla usando these instructions. Esto también puede ser un problema cuando su proveedor de alojamiento no ha configurado correctamente la configuración regional. Puede leer más sobre fixing your missing locales.

He encontrado toda esta información a través de este post sobre Fixing PostgreSQL's default encoding on Ubuntu 9.10

+0

Gracias, no tengo los comandos pg_dropcluster o No sabía dónde invocarlos, pero en el primer comentario de esa publicación encontré la solución adecuada para mí. – fespinozacast

+1

Excelente, me complace que haya encontrado una solución que funcionó para usted. –

+2

Solo un consejo si está inicializando la base de datos: 'initdb -EUTF8' – l0b0

81

Para solucionar este problema en Rails, he encontrado que simplemente puede añadir la siguiente línea a cada sección (desarrollo/producción, etc.) de su database.yml archivo:

template: template0 

Ver ActiveRecord/ConnectionAdapters/PostgreSQL/SchemaStatements#create_database para otras opciones.

+0

NO en rails 3.0.3 con postgresql 9.1.2 – Juanin

+0

Trabajó en Ubuntu 10.04, postgresql 8.4.9 y rieles 3.1.3. ¡Gracias! – Srisa

+0

Trabajó en Ubuntu 12.04, Rails 3.2.3, Ruby 1.9.2 y PostgreSQL 9.1.4. ¡GRACIAS! – juanpaco

21

Puede cambiar postgres template1 a ser UTF de la siguiente manera según lo fijado here:

UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1'; 
DROP DATABASE template1; 
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE'; 
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1'; 
\c template1 
VACUUM FREEZE; 
UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template1'; 
+0

OSX, funcionó para mí, instaló pg con homebrew, versión 9.3.2, Rails 4.0.5 – Valentin

+0

Esto funcionó perfectamente. – yeyo

+0

ERROR: codificación "UTF8 "no coincide con la configuración regional" en_US " DETALLE: La configuración elegida LC_CTYPE requiere la codificación" LATIN1 ". – Uilleann

6

Al igual que en las otras respuestas que encontré este GIST a ser muy útil. Usando Ubuntu 14.04. Quería cambiar la plantilla predeterminada para usar UTF-8.

entrar en el símbolo del postgres:

Activate the postgres console. 
su - postgres 
psql 

a continuación, escriba los siguientes comandos:

# First, we need to drop template1. Templates can’t be dropped, so we first modify it so t’s an ordinary database: 

     UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1'; 

# Now we can drop it: 

     DROP DATABASE template1; 

# Now its time to create database from template0, with a new default encoding: 

     CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE'; 

# Now modify template1 so it’s actually a template: 

     UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1'; 

# Now switch to template1 and VACUUM FREEZE the template: 

     \c template1 

     VACUUM FREEZE; 

problema debe ser resuelto.Créditos a: https://gist.github.com/amolkhanorkar-webonise/8706915

+0

Gracias, funcionó perfectamente. –

1

Adición

template: template0 

en config/database.yml trabajó para mí :-)

Cuestiones relacionadas