Tôi đang cố sử dụng hai Gems để truy cập Dịch vụ web của Amazon (AWS). Một là Amazon 'aws-sdk', cái kia là 'amazon-ec2'. Tôi đang sử dụng thứ hai như aws-sdk không bao gồm phần đồng hồ điện toán đám mây của các dịch vụ amazon.Tải hai mô-đun Ruby/Gems có cùng tên
Vấn đề là cả hai tải vào cùng một không gian tên.
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)
Bây giờ điều này dễ hiểu sẽ ném lỗi trên dòng cuối cùng khi mô-đun AWS trỏ vào thư viện bắt buộc đầu tiên, trong trường hợp này là aws-sdk.
NameError: uninitialized constant AWS::Cloudwatch
Vì vậy, tôi có thể tải một trong số đó vào không gian tên khác không? Một cái gì đó như
require 'aws-sdk', 'AWS_SDK'
require 'AWS', 'AWS_EC2'
ec2 = AWS_SDK::EC2.new(config)
cw = AWS_EC2::Cloudwatch::Base.new(config)
Hoặc có một mẹo khác tôi có thể sử dụng ở đây?
Cảm ơn
Cảm ơn. Có vẻ như có định nghĩa lại lớp/mô-đun xảy ra trong hai thư viện đó. Ví dụ AWS :: EC2 :: Instance là một mô-đun trong amazon-ec2 và một lớp trong aws-sdk. Bất kỳ ý tưởng làm thế nào tôi có thể sử dụng cả hai thư viện này? – Jon
Tôi không nghĩ rằng có thể sử dụng cả hai cùng nhau trong cùng một thông dịch viên Ruby. Có thể bạn không muốn chuyển sang đá quý hỗ trợ Cloudwatch hoặc mang theo mã để thực hiện hỗ trợ Cloudwatch từ một viên đá quý và tích hợp nó với nhau, tôi nghĩ rằng đặt cược tốt nhất của bạn là đặt công cụ Cloudwatch trong một trình thông dịch/quá trình Ruby riêng biệt và gọi nó từ các 'pro' chính của bạn thông qua DRb. Đó là hợp lý đơn giản. Tôi sử dụng kỹ thuật đó trong công việc để giao tiếp giữa một quá trình Ruby và một quá trình JRuby thúc đẩy một số thư viện Java. – Confusion
Hãy nghĩ đó là tuyến đường tôi đang đi xuống. Cảm ơn – Jon