2012-05-11 16 views
5

Ich habe ein Ruby-Skript auf CentOS ausgeführt und Ruby über Rvm (1.9.3) installiert.Ruby kann die Umgebungsvariable NLS_LANG nicht sehen

Ich habe die Variable NLS_LANG in .bash_profile festgelegt.

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

jedoch bei dem Versuch, es über Rubin zuzugreifen (das ist der oci8 Treiber der Fall ist), kann es nicht finden:

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

andere Vars Zugriff scheint zu funktionieren:

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

Meine Das Skript zeigt folgendes an: Warning: NLS_LANG is not set. fallback to US7ASCII.

Die Sache ist, ich laufe sqlplus aus dem Ruby-Skript (um einige .sql-Dateien auszuführen), und Sonderzeichen sind alle durcheinander.

Wie kann ich Ruby bekommen, um den Wert zu sehen?

+0

Wird "NLS_LANG" angezeigt, wenn Sie 'env' in der Shell ausführen? –

+0

Es wurde nicht angezeigt. Ich habe die Variable in .bash_profile gesetzt, aber nicht exportiert. – robertrv

Antwort

11

Sie benötigen Variablen exportieren laufen in allen Anwendungen zur Verfügung stehen (es sei denn, sie Funktionen sind):

export NLS_LANG 

oder zusammen mit der Einstellung:

export NLS_LANG=en_US.UTF-8 

oder als auf den meisten Systemen LANG sollte verfügbar sein:

export NLS_LANG=$LANG 
+1

Enthält LANG wirklich das Format, das Oracle in NLS_LANG erwartet? –

+9

Danke! Stellt sich heraus, dass ich die Variable nicht exportiert habe. 'en_US.UTF-8' hat jedoch nicht funktioniert (oci8 hat gesagt, dass es ungültig ist). Ich habe 'NLS_LANG = AMERICAN_AMERICA.UTF8' verwendet und OCI8 hat sich nicht darüber beschwert. – robertrv

+2

Das ist also alt, aber denken Sie daran, dass UTF8 in Oracle nicht UTF8 ist. Sie müssen AL32UTF8 verwenden. http://wonderingmisha.blogspot.jp/2011/10/utf8-vs-al32utf8.html – polm23