Você tem que distinguir duas configurações nls diferentes
-
o externo - definido pela variável de ambiente NLS_LANG em sua aplicação. Isso determina sua representação de string interna quando você envia dados para a biblioteca cliente OCI.
-
o interno. É o conjunto de caracteres usado pelo Oracle para armazenar seus dados em disco.
Tente executar
select r.module, t.*
from v$sesssion_connection_info t
join v$session r on (r.sid = t.sid and t.serial# = r.serial#)
where r.sid = <your ruby connection SID>;
select * from nls_database_parameters;
select * from nls_instance_parameters;
Se ele mostrar que você está usando algo como US7ASCII ou ISO8859P1, o Oracle aceita seu caractere e o converte no conjunto de caracteres de destino (removendo um acento ou substituindo por '?').