我正在将我的Rails应用程序迁移到Heroku,并且需要更改我的文件上传功能以使用AmazonS3而不是本地存储。我正在使用aws-s3gem并且可以正常工作,但我只是想确保我做的事情是正确的,而不是给自己制造问题。在我的上传代码中,我有以下内容;AWS::S3::Base.establish_connection!(:access_key_id=>'Nottelling',:secret_access_key=>'Reallynottelling')AWS::S3::S3Object.store("#{self.name}",upload_file_field.read,'my_b
我正在使用aws-sdkforRuby管理S3上的对象。我可以通过设置授予公共(public)读取权限object.acl=:public_read有没有办法在这样做之前确定是否已经向对象授予了公共(public)读取权限? 最佳答案 Rubyaws-sdk的文档很差,我也找不到它。下面是我创建的一个函数,用于检查文件是否具有读取权限。根据您的需要修改它:defcheck_if_public_read(object)object.acl.grants.eachdo|grant|beginif(grant.grantee.uri=="
我们使用亚马逊S3存储桶来发布js文件并将它们放在客户端网站上。也就是说,js文件是存放在amazons3中的。主要问题是因为这些文件位于客户端站点上,如果amazons3存储桶出现故障,我们不想为客户端提供新的js代码。Rails应用程序中有没有办法在不给客户另一个代码安装在他们的网站上的情况下进行冗余切换?我们希望那段代码在另一个存储桶出现故障时使用另一个存储桶,而无需重新发布任何内容或向客户端提供新的js代码。这似乎是不可能的,但我认为有人可能有想法。预先感谢您的所有帮助。 最佳答案 我从未听说过影响单个存储桶的扩展S3故障。
我尝试了两天让我的所有网站通过Heroku和AmazonAWSS3(存储我的图像)在互联网上运行,但是......我做不到!为了简单起见,我想使用带有回形针的Heroku和AmazonAWSS3来上传图片并显示它。我遵循了很多教程,但是,这个总结了我所做的一切:https://devcenter.heroku.com/articles/paperclip-s3上传系统与本地的基本存储配合良好,但如果我按照教程将此代码放入我的环境中,我会出错config.paperclip_defaults={:storage=>:s3,:s3_credentials=>{:bucket=>ENV['S
RubyZlib::GzipReader应该通过一个类似IO的对象来创建(必须有一个与IO#read行为相同的读取方法)。我的问题是我无法从AWS::S3库中获取这个类似IO的对象。据我所知,从中获取流的唯一方法是将block传递给S3Object#stream。我已经试过了:Zlib::GzipReader.new(AWS::S3::S3Object.stream('file','bucket'))#Wichgavesmeerror:undefinedmethod`read'for#有人知道我怎样才能实现吗? 最佳答案 一个简单的
我在亚马逊S3存储桶中存储了200万个文件。下面有一个给定的根(l1),l1下的目录列表,然后每个目录包含文件。所以我的桶看起来像下面这样l1/a1/file1-1.jpgl1/a1/file1-2.jpgl1/a1/...another500filesl1/a2/file2-1.jpgl1/a2/file2-2.jpgl1/a2/...another500files....l1/a5000/file5000-1.jpg我想尽快列出二级条目,所以我想得到a1、a2、a5000。我不想列出所有key,这会花费更长的时间。我愿意直接使用AWSapi,但是到目前为止,我一直在使用ruby
我正在使用AWSRubySDKv2跨多个区域访问各种存储桶。是否可以在我访问每个存储桶之前确定(在运行时)的区域,这样我就可以避免下面的错误,如果我用错误的区域配置AWSS3客户端,我会得到这个错误?Thebucketyouareattemptingtoaccessmustbeaddressedusingthespecifiedendpoint.Pleasesendallfuturerequeststothisendpoint.我知道我可以使用下面的命令并解析响应,但理想情况下,我想留在RubySDK中。awss3apiget-bucket-location
我正在尝试让Carrierwave与我的AmazonS3存储桶一起使用,但我有点不走运。在我的config/initializers文件夹中,我有一个名为carrierwave.rb的文件。该文件包含以下内容:CarrierWave.configuredo|config|config.fog_credentials={:provider=>'AWS',:aws_access_key_id=>ENV['AWS_ACCESS_KEY_ID'],:aws_secret_access_key=>ENV['AWS_SECRET_ACCESS_KEY']}config.cache_dir="#{R
如何将ActionDispatch::Http::UploadedFile上传到AmazonS3?@file_data=params[:upload][:file]s3=AWS::S3.newobj=s3.buckets['WeMake'].objects.create("video",file)然后我收到此错误:ArgumentError(:数据必须作为字符串、路径名、文件或响应#read和#eof的对象提供?): 最佳答案 我需要访问实际文件,params[:upload][:file].tempfile并向s3上传添加文件扩展
我想使用RubySDK重命名s3中的项目。我该怎么做?我试过:require'aws-sdk's3=AWS.config(:region=>'region',:access_key_id=>'key',:secret_access_key=>'key')b=AWS::S3::Bucket.new(client:s3,name:'taxalli')b.objects.eachdo|obj|obj.rename_to('imports/files/'+line.split('').last.split('/').last)end但我在新的SDK中看不到任何移动或重命名的内容。