Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas
Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas

Múltiples conexiones simultáneas de bases de datos con ActiveRecord

Configuración

Configuración del archivo database.yml que contendrá sus base de datos de diferentes.

database.yml
database_1:
adapter: mysql
host: db1.host
username: johnny
password: secret
database: db1

database_2:
adapter: mysql
host: db2.host
username: johnny
password: secret
database: db2


Setup Conexion BBDD


Crear una clase para cada conexión de base de datos. Sus modelos se heredan de estas clases.


require 'active_record'

$config = YAML.load_file(File.join(File.dirname(__FILE__), 'database.yml'))

class DatabaseA < ActiveRecord::Base

establish_connection $config['database1']

end

class DatabaseB < ActiveRecord::Base

establish_connection $config['database2']

end


Trabajando con la gema spreadsheet-excel

Hoy he tenido que luchar con spreadsheet-excel.

Estaba intentando leer datos de un excel con esta gema, y parecia todo muy sencillo, cuando empezaron las pruebas me encontré con el problemón. Los caracteres que me devolvía eran ilegibles.
Pronto comprendí que el encoding era diferente, ya que en excel es UTF-16LE y yo utilizo ISO-8859-1. Intente aplicarlo y nada, solo conseguía errores.
Hasta que me dí cuenta que los tipos de los valores que me estaba devolviendo eran diferentes a los que la aplicación excel me indicaba. Se suponía que todos eran Texto, pues no. Con spreadsheet algunos me decía que eran enteros. Claro yo a los enteros no les colocaba la codificación. Así que se la coloqué y funcionando.

Ejemplo de utilización:

require 'win32ole'
require 'parseexcel'

class Reader

def process_xls_files (param_prod_cd)
logger.info "Inicio proceso..."
Dir.entries(C:\\TEMP" ).each do d
if d != '.' && d != '..'
f_path = File.join("C:\\TEMP" , d)
workbook = Spreadsheet::ParseExcel.parse(f_path)
worksheet = workbook.worksheet(0)
cell = readCell(worksheet, contador, 0)
puts cell
end
end


def readCell(worksheet, linea, columna)
valorDevuelto = nil
begin
cell = (worksheet.row(linea).at(columna) )
cell_type = cell.type
cell_encoding = cell.encoding
if cell_type == :numeric
ivalorDevuelto = 0
ivalorDevuelto = cell.value
valorDevuelto = ivalorDevuelto.to_s.gsub('.0','')
elsif cell_type == :date
day = cell.date.day.to_s
mon = cell.date.mon.to_s
year = cell.date.year.to_s
valorDevuelto = "#{year}#{mon}#{day}"
elsif cell_type == :text
valorDevuelto = Iconv.iconv('ISO-8859-1',cell.encoding,(cell.to_s))
else
valorDevuelto = cell.to_s
end
rescue
valorDevuelto = ""
end
return valorDevuelto
end

end

Nube