Tag: amazon web services

如何在Object.get的输出中获取文件流

我在aws-sdk-ruby的帮助下编写了一个Rails API,它从AWS检索文件并在API的响应中返回。 我可以在object.get的响应中以某种方式得到文件流,我可以直接从Rails API返回。 s3 = Aws::S3::Resource.new bucket_name = “my_bucket” bucket = s3.bucket(bucket_name) object = bucket.object(“a/b/my.pdf”) Rails.logger.info ‘Downloading file to AWS’ downloaded_data = object.get({}) send_data(downloaded_data, :filename => “my.pdf”, :type => “mime/type” ) 但它不会返回文件。 我知道的一个选项是首先使用以下行在本地保存文件: object.get(response_target: ‘/tmp/my.pdf’) 我可以返回此文件, 但有没有办法跳过此步骤并直接返回object.get的响应而不保存在本地 。 我无法使用此解决方案,因为我的URL不公开,我只是创建一个REST API。 当我尝试这个解决方案时,我得到了屏幕。

HTTP调用在本地与AWS的行为不同 – 是ruby还是AWS?

我写的API有一个奇怪的问题。 API已经使http获取对其他服务的请求,并在某些情况下超时 – 在大多数情况下,其他服务关闭/无法访问。 我正在尝试完全在AWS上运行系统,但是当在那里运行API时,我会经常尝试访问同一实例上的服务。 API是用ruby + sinatra编写的; 我从来没有遇到过它的python前辈的问题。 如果我从AWS实例命令行curl其他服务的URL,我永远不会得到超时。 当我在本地运行API(AWS上的其他服务)时,它每次运行都很好。 最初我认为它可能是我正在使用的http库 – net / http,甚至在本地也存在问题。 切换到open-uri或rest-client修复了所有本地问题,但是当我在AWS上运行时,我仍然会有20%的时间超时。 API是ruby + sinatra,使用open-uri来执行http请求。 其他服务是ruby + sinatra或java。 我正在运行一个32位的Amazon Linux小实例,ruby 1.9.3,java 1.6; 我的本地机器是Mac with Snow Leopard,带有ruby 1.9.3和java 1.6。 任何想法或提示,以进一步缩小可能发生的事情? 更新:我的大sinatra应用程序和小sinatra应用程序表现不同!? 我的sinatra应用程序的测试版本调用我的java服务,都在AWS上运行……工作正常。 require ‘rubygems’ require ‘uri’ require ‘open-uri’ require ‘sinatra’ set :port, 6969 get ‘/wtf’ do xid = params[:xid] state = […]

Paperclip,S3,Heroku:缺少图像

长时间观看,第一次问问。 我搜索过这个主题,但不相信我找到了答案。 我有一个有图像的Post模型。 我正在使用Paperclip gem,保存到Amazon S3,并在Heroku上托管。 文件上传表单工作正常,因为我可以看到图像被发送到我的S3存储桶。 问题在于,图像实际上并未在生产中显示。 这是我的模特: class Post ” } validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/ 这是我的config / production.rb: # Required for Paperclip / AWS config.paperclip_defaults = { :storage => :s3, :s3_credentials => { :bucket => ENV[‘S3_BUCKET_NAME’], :access_key_id => ENV[‘AWS_ACCESS_KEY_ID’], :secret_access_key => ENV[‘AWS_SECRET_ACCESS_KEY’] } } 这是我的show.html.haml文件: .clearfix .post_image_description = image_tag @post.image.url(:medium) .description= simple_format(@post.address) .description= […]

无法让nginx在生产中使用Rails应用程序

我有一个Rails应用程序,它在Webrick的本地机器上运行良好。 我尝试将其部署到AWS EC2。 我已将我的应用程序源从bitbucket复制到/home/ubuntu并通过此命令安装了nginx和passenger(以及其他所需的所有内容,如gem,ruby等): rvmsudo passenger-install-nginx-module 然后我这样做了: $ git clone git://github.com/jnstq/rails-nginx-passenger-ubuntu.git $ sudo mv rails-nginx-passenger-ubuntu/nginx/nginx /etc/init.d/nginx $ sudo chown root:root /etc/init.d/nginx Nginx本身运行良好(!),例如: $ sudo /etc/init.d/nginx restart * Stopping Nginx Server… [ OK ] * Starting Nginx Server… [ OK ] 它安装在/ opt / nginx中,即使这样我也必须使用/etc/init.d/nginx来控制它的状态。 这是我的/opt/nginx/nginx.conf文件: server { listen 80; server_name localhost; root /home/ubuntu/my_app/public/; passenger_enabled on; […]

使用AWS Elastic Beanstalk部署Rails ActionCable

我正在尝试在AWS Elastic Beanstalk上部署来自DHH的聊天演示。 我已经按照这里的教程: https : //keithpblog.wordpress.com/2015/12/30/rails-5-tutorial-chat-app-can-we-deploy-it我设法得到了解决方案部署在单个实例中,Redis也启动并运行。 但是当我尝试发布某些内容时,消息将保存在数据库中,但不会被WebSocket返回。 我检查了production.log,我看到这个错误信息: E,[2016-05-20T20:33:52.676577#24281]错误 – :有一个exception – Gem :: LoadError(为Action Cable pubsub适配器指定’redis’,但没有加载gem ‘redis’ 。添加gem ‘redis’到您的Gemfile(并确保其版本达到Action Cable所需的最低版本)。) E,[2016-05-20T20:33:52.676826#24281]错误 – :/opt/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.rc1/ lib / action_cable / server / configuration.rb:37:在`pubsub_adapter中的救援’ /opt/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.0.rc1/lib/action_cable/server/configuration.rb:34:in`pubsub_adapter’ 我也有我的Gemfile:gem’redis’,’〜> 3.2′ 有任何想法吗? 谢谢!

如何使用ruby将S3存储桶中的文件内容下载到内存中?

这里是ruby的新手, 我在Amazon AWS S3中有一个存储桶,其中有一个名为users.csv的文件 如何将这个文件的内容从S3存储桶加载到内存中? 我希望能够在将文件加载到内存后解析该文件的内容。 这是我的代码: require ‘aws-sdk’ s3 = Aws::S3::Resource.new(region: ‘us-west-1’) resp = s3.list_objects(bucket: ‘bucket-name’, max_keys: 1) resp.contents.each do |object| puts #{object.value} end 当我在IRB中尝试这个时,我得到: struct Aws :: S3 :: Types :: Object key =“users.csv”,last_modified = 2017-11-15 19:10:28 UTC,etag =“\”9a3d50c07aa4aa6976037ce774294a26 \“”,size = 101,storage_class =“ STANDARD“,owner = struct Aws :: S3 :: Types :: Owner […]

Ruby Flow框架的AWS SWF API调用日志记录

所以我需要能够看到每个决策者和活动的日志从它给出的内容和失败的方式开始等等 我熟悉这个文档,但只允许mw查看注册和弃用,我需要记录内部并能够看到它们……我正在使用Ruby和流程框架。 我已经搜索过文档但找不到任何东西….任何人都可以帮助我吗?

缺少必需的参数:ras测试中的aws_access_key_id,aws_secret_access_key

我正在做hartle教程的第11章。 当我运行heroku run rake db:migrate我收到此错误: Missing required arguments: aws_access_key_id, aws_secret_access_key 我在这里输入链接描述的答案解决了它并成功迁移。但是现在当我运行时 bundle exec rake test 它给了我: rake aborted! ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key 这是我的carrierwave文件: CarrierWave.configure do |config| config.fog_credentials = { :provider => ‘AWS’, :aws_access_key_id => ENV[‘S3_KEY’], :aws_secret_access_key => ENV[‘S3_SECRET’], :region => ENV[‘S3_REGION’], :endpoint => ENV[‘S3_ENDPOINT’] } if Rails.env.test? || Rails.env.development? config.storage = :file config.enable_processing […]

如何枚举运行ec2实例并使用ruby将它们加载到数据库中?

我正在使用aws-sdk gem,我无法想出如何列出所有正在运行的ec2实例并将它们加载到数据库中。 我需要一个如何做到这一点的方法。

以编程方式将ELPC节点添加到ELB

以下代码旨在将VPC中新部署的EC2实例添加到负载均衡器。 (这显然是测试/虚拟代码,但实际工作流程在实际系统中是相同的) require ‘yaml’ gem ‘aws-sdk’,’1.6.0′ require ‘aws-sdk’ AWS.config({ :access_key_id => KEY, :secret_access_key => SECRET_KEY }) ec2 = AWS::EC2.new elb = AWS::ELB.new i = ec2.instances[“i-abcd1234”] elb.load_balancers[“lb-name”].instances.register(i) 当我运行此代码时,我收到此错误: AWS::ELB::Errors::ValidationError: ELB in VPC is not supported in this version of API. Please try 2011-11-15 or newer. 我的aws-sdk gem是RubyGems提供的最新版本,本周更新了。 这不是Ruby SDK for AWS中可用的function吗? 如何通过此gem或其他方式将VPC节点添加到带有Ruby代码的Load Balancer?