2012-05-11 35 views
5

Tôi đang chạy tập lệnh ruby ​​trên CentOS và đã cài đặt ruby ​​qua rvm (1.9.3).Ruby không thể thấy biến môi trường NLS_LANG

Tôi đã đặt biến NLS_LANG trong .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 

Tuy nhiên khi cố gắng truy cập nó qua ruby ​​(mà người lái xe oci8 không), nó có thể không tìm thấy nó:

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

Truy cập vars khác dường như làm việc:

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

My tập lệnh hiển thị như sau: Warning: NLS_LANG is not set. fallback to US7ASCII.

Thing là tôi đang chạy sqlplus từ tập lệnh ruby ​​(để thực thi một số tệp .sql) và các ký tự đặc biệt đều bị rối tung lên.

Làm cách nào để tôi nhận được giá trị?

+0

'NLS_LANG' có hiển thị khi bạn chạy' env' trong vỏ không? –

+0

Nó không hiển thị. Tôi đã đặt biến trong .bash_profile, nhưng không xuất biến. – robertrv

Trả lời

11

Bạn cần phải xuất khẩu các biến của bạn có sẵn trong bất kỳ ứng dụng chạy (trừ khi họ là chức năng):

export NLS_LANG 

hoặc cùng với thiết lập:

export NLS_LANG=en_US.UTF-8 

hoặc như trên hầu hết các hệ LANG nên có sẵn:

export NLS_LANG=$LANG 
+1

LANG có thực sự chứa định dạng mà Oracle mong đợi trong NLS_LANG không? –

+9

Cảm ơn! Hóa ra tôi đã không xuất biến. Tuy nhiên, 'en_US.UTF-8' không hoạt động (oci8 cho biết nó không hợp lệ). Tôi đã sử dụng 'NLS_LANG = AMERICAN_AMERICA.UTF8' và oci8 không khiếu nại về nó. – robertrv

+2

Vì vậy, đây là cổ đại, nhưng hãy nhớ rằng UTF8 không phải là UTF8 trong Oracle. Bạn cần sử dụng AL32UTF8. http://wonderingmisha.blogspot.jp/2011/10/utf8-vs-al32utf8.html – polm23

Các vấn đề liên quan