2012-05-11 27 views
5

Estoy ejecutando un script de ruby ​​en CentOS, e instalé ruby ​​a través de rvm (1.9.3).Ruby no puede ver la variable de entorno NLS_LANG

He establecido la variable NLS_LANG en .bash_profile.

[[email protected] stasis]$ echo $NLS_LANG 
en_US.UTF-8 
[[email protected] stasis]$ which ruby 
~/.rvm/rubies/ruby-1.9.3-p194/bin/ruby 

Sin embargo cuando se trata de acceder a él a través de rubí (que el conductor oci8 hace), no puede encontrarlo:

1.9.3-p194 :001 > ENV['NLS_LANG'] 
=> nil 

Acceso a otras vars parece funcionar:

1.9.3-p194 :004 > ENV['USER'] 
=> "app" 

Mi el script muestra lo siguiente: Warning: NLS_LANG is not set. fallback to US7ASCII.

Thing is Estoy ejecutando sqlplus desde el script de ruby ​​(para ejecutar algunos archivos .sql), y los caracteres especiales están todos desordenados.

¿Cómo puedo obtener ruby ​​para ver el valor?

+0

¿Aparece 'NLS_LANG' cuando ejecuta' env' en el shell? –

+0

No estaba apareciendo. Estaba estableciendo la variable en .bash_profile, pero no exportándola. – robertrv

Respuesta

11

necesita exportar sus variables que esté disponible en todas las aplicaciones de ejecución (a menos que sean funciones):

export NLS_LANG 

o junto con ajuste:

export NLS_LANG=en_US.UTF-8 

o como en la mayoría de los sistemas LANG debe estar disponible:

export NLS_LANG=$LANG 
+1

¿LANG realmente contiene el formato que Oracle espera en NLS_LANG? –

+9

¡Gracias! Resulta que no estaba exportando la variable. 'en_US.UTF-8' no funcionó bien (oci8 dijo que no era válido). Usé 'NLS_LANG = AMERICAN_AMERICA.UTF8' y oci8 no me quejé. – robertrv

+2

Esto es antiguo, pero recuerde que UTF8 no es UTF8 en Oracle. Necesita usar AL32UTF8. http://wonderingmisha.blogspot.jp/2011/10/utf8-vs-al32utf8.html – polm23

Cuestiones relacionadas