Estoy tratando de usar dos gemas para acceder a Amazon Web Services (AWS). Uno es Amazon 'aws-sdk', el otro es 'amazon-ec2'. Estoy usando el segundo ya que el aws-sdk no cubre la sección cloudwatch de los servicios de Amazon.Cargue dos módulos Ruby/gemas con el mismo nombre
El problema es que ambos se cargan en el mismo espacio de nombres.
require 'aws-sdk' # aws-sdk gem
require 'AWS' # amazon-ec2 gem
config = {:access_key_id => 'abc', :secret_key => 'xyz'}
# start using the API with aws-sdk
ec2 = AWS::EC2.new(config)
# start using the API for anazon-ec2
cw = AWS::Cloudwatch::Base.new(config)
Ahora bien, esto es comprensible tiros un error en la última línea que el módulo de AWS está apuntando a la primera biblioteca requerida, en este caso AWS-SDK.
NameError: uninitialized constant AWS::Cloudwatch
Entonces, ¿es posible que cargue uno de esos en otro espacio de nombres? Algo como
require 'aws-sdk', 'AWS_SDK'
require 'AWS', 'AWS_EC2'
ec2 = AWS_SDK::EC2.new(config)
cw = AWS_EC2::Cloudwatch::Base.new(config)
¿O hay otro truco que podría usar aquí?
Gracias
Gracias. Parece que hay una redefinición de clase/módulo en esas dos bibliotecas. Por ejemplo, AWS :: EC2 :: Instance es un módulo en amazon-ec2 y una clase en aws-sdk. ¿Alguna idea de cómo podría usar ambas bibliotecas? – Jon
No creo que sea posible utilizar estos dos en el mismo intérprete de Ruby. Como probablemente no quiera cambiar a la gema que soporta Cloudwatch o tomarla para tomar el código que implementa el soporte de Cloudwatch de una gema e integrarlo en la otra, creo que su mejor opción es poner las cosas de Cloudwatch en un intérprete/proceso de Ruby separado y llámalo desde tu proceso 'principal' a través de DRb. Eso es razonablemente sencillo. Utilizo esa técnica en el trabajo para comunicarme entre un proceso de Ruby y un proceso de JRuby que aprovecha algunas bibliotecas de Java. – Confusion
Creo que esa es la ruta a la que me dirijo. Gracias – Jon