Foros del Web » Programando para Internet » Ruby »

[SOLUCIONADO] RoR y SQL

Estas en el tema de RoR y SQL en el foro de Ruby en Foros del Web. Hola que tal, bueno este post lo inico para saber si alguien me puede ayudar con este predicamento jejeje. Se que rails usa fuertemente el ...
  #1 (permalink)  
Antiguo 10/03/2014, 19:26
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
RoR y SQL

Hola que tal, bueno este post lo inico para saber si alguien me puede ayudar con este predicamento jejeje.

Se que rails usa fuertemente el Active Record y deacuerdo a lo que puede revisar es muy potente, desde mi punto de vista , pero por motivos de la empresa donde trabajo, tengo que usar rails con SQL.

Para esto la BD de SQL ya existen y tienen información, por lo que usamos los SP para obtener información entre las tablas.

Alguien sabe o bien a hecho alguna aplicación, donde trabaje con SQL y RoR, segun e leido se pierde la magia de RoR, pero pues es por cosas de la empresa

Se agradece cualquier comentario y si se cuenta con ejemplos, mejor
  #2 (permalink)  
Antiguo 11/03/2014, 10:18
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: RoR y SQL

¿Te refieres a no usar ActiveRecord para nada?

Porque en ActiveRecord puedes hacer consultas SQL, aunque al final de cuentasl Arel (el motor de consultas de ActiveRecord) genera una consulta SQL.
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 11/03/2014, 12:45
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Buenos dias, asi es.

Seria no usar ActiveRecord, puesto que todas las consultas las realizaria por medio de SP, que serian los que me regresarian la información.

Es mas rapido con ActiveRecord, pero ocupo hacerlo por medio de dichos SP.
  #4 (permalink)  
Antiguo 13/03/2014, 15:17
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: RoR y SQL

Disculpa, pero ¿Qué es SP?, ¿Como funciona?

Un saludo!
__________________
>> abimaelmartell.com
  #5 (permalink)  
Antiguo 13/03/2014, 16:45
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Hola que tal, bueno los SP son los Store Procedure que se generan en SQL para obtener información.

Cita:
Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

Usos típicos para procedimientos almacenados incluyen la validación de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son llamados disparadores; triggers en inglés), o encapsular un proceso grande y complejo. El último ejemplo generalmente ejecutará más rápido como un procedimiento almacenado que de haber sido implementado como, por ejemplo, un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados.

Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.

Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.
Fuente: http://es.wikipedia.org/wiki/Procedimiento_almacenado

  #6 (permalink)  
Antiguo 13/03/2014, 17:19
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: RoR y SQL

Ah si se lo que son los Store Procedures, pero las siglas SP son muy genericas.

Los Store Procedures generalmente no se usan en Rails, por que la logica de tu aplicacion depende mucho de la base de datos.

Aun asi, para los store procedures, necesitas ejecutar SQL, asi que si necesitaras ActiveRecord.

Creo que existe una gema para utilizar store procedures con ActiveRecord pero no recuerdo como se llama, si buscas creo que la encontraras.

Saludos!
__________________
>> abimaelmartell.com
  #7 (permalink)  
Antiguo 24/03/2014, 16:48
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Gracias por contestar abimex, pero tengo un problema al conectar Rails con SQL.

Utilizo las siguientes gemas:

gem 'activerecord', '~> 4.0.4'
gem 'activerecord-sqlserver-adapter', '~> 3.2.12'
gem 'tiny_tds', '~> 0.6.1'

Los puse en mi GemFile y corro el bundle install. Pero me sale el siguiente msj de error:

Cita:
Bundler could not find compatible versions for gem "activerecord":
In Gemfile:
activerecord-sqlserver-adapter (~> 3.2.12) x86-mingw32 depends on
activerecord (~> 3.2.0) x86-mingw32

activerecord (4.0.4)
Se me hace raro, puesto que instale y puse las versiones que necesito de las gemas, pero me sale siempre el mismo error y no encuentro que puede ser

Si alguien sabe como solucionarlo o bien me puede ayudar a corregirlo se lo agradeceria

Se me olvido comentar, mis versiones de Ruby y de Rails

Cita:
C:\Users\Usuario>ruby -v
ruby 1.9.3p545 (2014-02-24) [i386-mingw32]

C:\Users\Usuario>rails -v
Rails 4.0.4

Última edición por drako_darpan; 24/03/2014 a las 16:55
  #8 (permalink)  
Antiguo 24/03/2014, 22:12
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: RoR y SQL

Intenta con esto, es que la version que funciona en rails 4 aun no esta liberada, pero puedes usarla desde github

Código ruby:
Ver original
  1. gem 'activerecord-sqlserver-adapter', github: 'rails-sqlserver/activerecord-sqlserver-adapter'
__________________
>> abimaelmartell.com
  #9 (permalink)  
Antiguo 25/03/2014, 13:21
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Hola que tal, gracias por responder abimex, revise lo que me pasaste, pero no funciona

El problema, estoy bajo un proxy y al querer correrlo con el bundle install no me funciona.

Ya lo corri de la siguiente manera, pero tampoco me deja:

Código Rails:
Ver original
  1. gem 'activerecord-sqlserver-adapter', '~> 4.0.0', :git => "git://github.com/rails-sqlserver/activerecord-sqlserver-adapter.git"

No uso el activerecord-sqlserver-adapter, uso esta otra gema y ya con eso se soluciona, el arranque del server:

Código Rails:
Ver original
  1. gem 'sic-activerecord-sqlserver-adapter', '~> 4.0.0'

Pero, ahora tengo otro problema , en el programa inicio el servidor ( rails s ) y se inicia sin problemas. Pero cuando en el navegador pongo localhost:3000 me sale este msj de error:

Cita:
C:\proyectos\Laboratorio\organizacion>rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-03-25 12:02:40] INFO WEBrick 1.3.1
[2014-03-25 12:02:40] INFO ruby 1.9.3 (2013-11-22) [i386-mingw32]
[2014-03-25 12:02:40] INFO WEBrick::HTTPServer#start: pid=4648 port=3000


Started GET "/" for 127.0.0.1 at 2014-03-25 12:02:44 -0700
FreeTDS may have issues with passwords longer than 30 characters!
Se me hace raro, estoy viendo y es una version de FreeTDS la cual no aceptaba mas de 30 caracteres, pero no se que mas hacer

Estoy trabajando bajo una version de Windows 7 64 bit.

Gracias

Es una batalla conectar SQL con RoR
  #10 (permalink)  
Antiguo 26/03/2014, 11:55
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Bueno despues de mucho buscar y buscar, encontre el problema.

El problema esta en la gema tiny_tds, en la linea 63, en esta linea esta de la siguiente manera:

Código Ruby:
Ver original
  1. def initialize(opts={})
  2.       if opts[:password] && opts[:password].to_s.strip != ''
  3.         opts[:password] = opts[:password].to_s
  4.         warn 'FreeTDS may have issues with passwords longer than 30 characters!' if opts[:password].length > 30
  5.       end

Con lo cual me esta afectando, puesto que los pass que yo manejo son de 33 caracteres. Ya lo modifique manualmente y lo puse de 50, con esto ya no marca el error de los 30 caracteres, pero el servidor se cierra.

Código Ruby:
Ver original
  1. Started GET "/" for 127.0.0.1 at 2014-03-26 10:47:16 -0700

Revise y el tiny_tds también usa la libreria Freetds, la descarge y la revise y encontre que acepta hasta 128 caracteres

Código C++:
Ver original
  1. #define TDS_MAX_LOGIN_STR_SZ 128

La tiny_td actual es la version 0.6.1. La verdad que me tiene algo desilusionado, puesto que queria hacer un sistema con ruby y con el molesto SQL server , lamentablemente que no acepte mas de 30 caracteres es una limitante y muy fuerte.

Saben de alguna otra gema con la que pueda conectarme a SQL y que de preferencia no use tiny_tds

Por mientras seguire con Django , puesto que con el si pude realizar la conexion a SQL.
  #11 (permalink)  
Antiguo 26/03/2014, 12:20
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: RoR y SQL

entonces, ¿no te podias conectar?

si te fijas bien no te da un error, solamente te advierte que puedes tener problemas con contraseñas mas grandes
__________________
>> abimaelmartell.com
  #12 (permalink)  
Antiguo 26/03/2014, 13:03
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Hola, pues si abimex, no me puedo conectar.

Con respecto a lo que comentas:

Cita:
si te fijas bien no te da un error, solamente te advierte que puedes tener problemas con contraseñas mas grandes
Efectivamente no me puedo conectar, el detalle como lo puse al lanzar el servidor se levanta sin problemas

Código Rails:
Ver original
  1. C:\proyectos\Laboratorio\organizacion>rails s
  2. => Booting WEBrick
  3. => Rails 4.0.4 application starting in development on http://0.0.0.0:3000
  4. => Run `rails server -h` for more startup options
  5. => Ctrl-C to shutdown server
  6. [2014-03-25 12:02:40] INFO WEBrick 1.3.1
  7. [2014-03-25 12:02:40] INFO ruby 1.9.3 (2013-11-22) [i386-mingw32]
  8. [2014-03-25 12:02:40] INFO WEBrick::HTTPServer#start: pid=4648 port=3000

El problema viene, al querer entrar al localhost:3000, que es cuando me aparece

Código Rails:
Ver original
  1. Started GET "/" for 127.0.0.1 at 2014-03-25 12:02:44 -0700
  2. FreeTDS may have issues with passwords longer than 30 characters!

Y el servidor se cierra, sin ninguna razon aparente

Con el cambio que le realize ( El aumento de 30 a 50 ) el msj ya no aparecer, pero el servidor se sigue cerrando sin razon aparente

Código Rails:
Ver original
  1. Started GET "/" for 127.0.0.1 at 2014-03-25 12:02:44 -0700

Estas son mis gemas:

Cita:
*** LOCAL GEMS ***

actionmailer (4.1.0.rc1, 4.0.4, 3.2.16)
actionpack (4.1.0.rc1, 4.0.4, 4.0.2, 3.2.16)
actionview (4.1.0.rc1)
activemodel (4.1.0.rc1, 4.0.4, 3.2.16)
activerecord (4.1.0.rc1, 4.0.4, 3.2.16)
activerecord-deprecated_finders (1.0.3)
activerecord-sqlserver-adapter (3.2.12) => *
activeresource (3.2.16)
activesupport (4.1.0.rc1, 4.0.4, 4.0.2, 3.2.16)
addressable (2.3.6)
arel (5.0.0, 4.0.2, 3.0.3)
atomic (1.1.15, 1.1.14)
bcrypt (3.1.7 x86-mingw32)
bcrypt-ruby (3.1.5 x86-mingw32)
bench_press (0.3.1)
bigdecimal (1.1.0)
builder (3.1.4, 3.0.4)
bundler (1.3.5)
coffee-rails (4.0.1)
coffee-script (2.2.0)
coffee-script-source (1.7.0, 1.6.3)
data_objects (0.10.14)
dbd-odbc (0.2.5)
dbi (0.4.5)
deprecated (3.0.1, 2.0.1)
descendants_tracker (0.0.3)
do_sqlserver-tinytds (0.10.17.alpha)
docile (1.1.3)
erubis (2.7.0)
execjs (2.0.2)
facter (1.7.5)
faraday (0.9.0)
git (1.2.6)
github_api (0.11.3)
hashie (2.0.5)
highline (1.6.21)
hike (1.2.3)
httparty (0.13.0)
i18n (0.6.9)
io-console (0.3)
jbuilder (2.0.5, 2.0.3)
jeweler (2.0.1)
journey (1.0.4)
jquery-rails (3.1.0, 3.0.4)
json (1.8.1, 1.5.5)
jwt (0.1.11)
magic_multi_connections (1.2.1)
mail (2.5.4)
metaclass (0.0.4)
mime-types (1.25.1)
mini_portile (0.5.3)
minitest (5.3.1, 4.7.5, 2.5.1)
minitest-spec-rails (5.0.2)
mocha (1.0.0)
multi_json (1.8.4, 1.8.2)
multi_xml (0.5.5)
multipart-post (2.0.0)
nokogiri (1.6.1 x86-mingw32)
oauth2 (0.9.3)
pg (0.17.1 x86-mingw32)
polyglot (0.3.4, 0.3.3)
rack (1.5.2, 1.4.5)
rack-cache (1.2)
rack-ssl (1.3.3)
rack-test (0.6.2)
rails (4.1.0.rc1, 4.0.4, 3.2.16)
railties (4.1.0.rc1, 4.0.4, 4.0.2, 3.2.16)
rake (10.2.0, 10.1.1, 0.9.2.2)
rb-readline (0.5.0)
rdoc (4.1.1, 3.9.5)
ruby-graphviz (1.0.9)
ruby-odbc (0.99995)
ruby-prof (0.14.2)
rubyzip (1.1.0)
sass (3.2.14, 3.2.13)
sass-rails (4.0.2, 4.0.1)
sdoc (0.4.0)
sic-activerecord-sqlserver-adapter (4.0.0) => *
simplecov (0.8.2)
simplecov-html (0.8.0)
sprockets (2.11.0, 2.10.1, 2.2.2)
sprockets-rails (2.0.1)
sqlite3 (1.3.9 x86-mingw32, 1.3.8 x86-mingw32)
sqlite3-ruby (1.3.3)
thor (0.19.1, 0.18.1)
thread_safe (0.3.1, 0.2.0, 0.1.3)
tilt (1.4.1)
tiny_tds (0.6.1 x86-mingw32)
treetop (1.4.15)
turbolinks (2.2.1)
tzinfo (1.1.0, 0.3.39, 0.3.38)
uglifier (2.5.0, 2.4.0)
Si te fijas tengo marcados con un * estas gemas:

activerecord-sqlserver-adapter (3.2.12) y sic-activerecord-sqlserver-adapter (4.0.0)

Cuando tenia, unicamente la gema activerecord-sqlserver-adapter (3.2.12) no podia levantar el servidor ( rails s )

Cuando anexe sic-activerecord-sqlserver-adapter (4.0.0), el servidor ya lo pude levantar sin problemas ( rails s ), pero ahora tengo los otros problemas mencionados arriba
  #13 (permalink)  
Antiguo 26/03/2014, 19:05
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Hola de nuevo yo, jejeje

Bueno despues de hacer varias pruebas, llegue a la conclusion que el problema es la gema.

Ejecute el rake db:migrate, para la creacion de las tablas y no hace nada

Cambie eh hice una conexion a PostgreSQL, pass de 33 caracteres también y con correr el rake db:migrate, inmediatamente me genero las tablas

Asi que el problema es la gema al parecer que no se puede conectar. Voy a hacer de nuevo el proyecto para ver si hice algo mal o biens e me paso algo.

Luego aviso de los avances
  #14 (permalink)  
Antiguo 27/03/2014, 11:45
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: RoR y SQL

¿Por qué no preguntas en github?

https://github.com/rails-sqlserver/a...adapter/issues

Ahi puedes postear tu problema y los desarrolladores de la gema te contestaran.

Saludos!
__________________
>> abimaelmartell.com
  #15 (permalink)  
Antiguo 28/03/2014, 11:08
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: RoR y SQL

Gracias abimex por responder, pero despues de estar duro y dale, ya pude hacer la conexion por fin

Pasos que yo segui para hacer la conexion:

1.- Gemas necesarias

Código Ruby:
Ver original
  1. gem 'ruby-odbc', '~> 0.99995'
  2. gem 'tiny_tds', '~> 0.6.1'
  3. gem 'sic-activerecord-sqlserver-adapter', '~> 4.0.0'

2.- Se crea un DSN del sistema ( Si es Windows 7 a 64 bits, lo crean en SysWOW64 => odbcad32 )

3.- El archivo database.yml lo deje de la siguiente manera:

Código Ruby:
Ver original
  1. development:
  2.   adapter:  sqlserver
  3.   database: BD
  4.   dsn:      Nombre_del_DSN_Creado
  5.   mode:     odbc
  6.   username: Usuario
  7.   password: Pass
  8.   encoding: utf8

Con esto pude hacer la conexion sin problemas

Etiquetas: rails, ror, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:45.