ruby-on-rails – 如何设置Amazon S3,回形针和ENV变量

ruby-on-rails – 如何设置Amazon S3,回形针和ENV变量,第1张

概述我已经尝试了许多不同的方法来使用ENV变量设置S3以进行图像上传,并且无法使其工作.我知道我的密钥和存储桶名称有用,因为当我将它们直接放入代码时,我的图像正确上传.但是,当我尝试切换到ENV变量时,事情不起作用. 我使用了figaro gem,它创建了application.yml.在那个文件中,我有: S3_BUCKET_NAME "xxxxx"AWS_ACCESS_KEY_ID: "AAAA 我已经尝试了许多不同的方法来使用ENV变量设置S3以进行图像上传,并且无法使其工作.我知道我的密钥和存储桶名称有用,因为当我将它们直接放入代码时,我的图像正确上传.但是,当我尝试切换到ENV变量时,事情不起作用.

我使用了figaro gem,它创建了application.yml.在那个文件中,我有:

S3_BUCKET_name "xxxxx"AWS_ACCESS_KEY_ID: "AAAAAAAAA"AWS_SECRET_ACCESS_KEY: "BBBbbbBBBB"

不确定是否应该有引号,但是现在,我已将它们放进去了.我也没试过.

在我的模型(Listing.rb)中,我有:

has_attached_file :image,:styles => { :medium => "200x",:thumb => "100x100" },:default_url => "default.png",:storage => :s3,:s3_credentials => Proc.new{|a| a.instance.s3_credentials }def s3_credentials  {:bucket => ENV["S3_BUCKET_name"],:access_key_ID => ENV["AWS_ACCESS_KEY_ID"],:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"]end

就像我说的,当我将值硬编码到def s3_credentials时,一切正常.就在我尝试换掉ENV变量时,事情就会崩溃.

在paperclip.rb中,我有:

Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'

我在production.rb和development.rb中也有这个代码:

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'] }}

以下是上传新图片时收到的错误消息:“我们计算的请求签名与您提供的签名不符.请检查您的密钥和签名方法.”在线:“if @ Listing.save”.使用硬编码的凭据上传的那些仍然可以在我的应用程序中看到.

我对rails很新,看过这里和其他地方,包括S3和回形针文档,找不到可行的解决方案.如果您需要查看任何其他代码,请与我们联系.我计划部署到heroku,如果这很重要,并且看到figaro应该与heroku很好地配合.谢谢.

编辑/更新:对于将来阅读此内容的其他人,Sachin的答案在下面有效.但是,我的一个密钥ID中有一个”.当试图通过命令行添加ENV变量时,”(包括它)之后的所有字符都被切断了.只需将它们包裹在“”中,你就应该好好去.

此外,我放弃了使用figaro gem,并设置了aws.rb初始化文件(根据亚马逊的说明).以下是该文件的内容:

AWS.config(  :access_key_ID => ENV['AWS_ACCESS_KEY_ID'],:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])S3_BUCKET = AWS::S3.new.buckets[ENV['S3_BUCKET']]

我不知道这是否有任何区别,但我的development.rb和production.rb文件现在具有以下作为回形针默认值:

config.paperclip_defaults = { :storage => :s3,:bucket => "your_real_bucket_name_here_in_quotes",:s3_credentials => {  :access_key_ID => ENV['AWS_ACCESS_KEY_ID'],:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] }}

另请注意,切换到将ENV桶名称称为S3_BUCKET与S3_BUCKET_name.

我的模型(Listing.rb)中的代码现在是这样的:

has_attached_file :image,:thumb  "100x100"},:bucket => "your_real_bucket_name_here_in_quotes"valIDates_attachment_content_type :image,:content_type => ["image/jpg","image/jpeg","image/png","image/gif"]
解决方法 你可以做一件事:

您可以在development.rb或production.rb中设置此配置

config.paperclip_defaults = {  :storage => :s3,:s3_credentials => {    :bucket => ENV['S3_BUCKET_name'],:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']  }}

如果要将此环境变量设置为local,请使用以下命令:

sudo nano ~/.profile

然后在这里添加变量

export S3_BUCKET_name="your bucket name"export AWS_ACCESS_KEY_ID="your access key ID"export AWS_SECRET_ACCESS_KEY="your secret access key"

然后重新加载你的〜/ .profile. 〜/ .profile文件

使用echo $S3_BUCKET_name检查添加的变量

而对于Heroku

您可以将变量设置为:

heroku config:set S3_BUCKET_name="your bucket name"heroku config:set AWS_ACCESS_KEY_ID="your access key ID"heroku config:set AWS_SECRET_ACCESS_KEY="your secret access key"

使用heroku config检查heroku中是否添加了变量

有关更多详细信息,请参阅表格here.

如果您需要我更多,请告诉我..

总结

以上是内存溢出为你收集整理的ruby-on-rails – 如何设置Amazon S3,回形针和ENV变量全部内容,希望文章能够帮你解决ruby-on-rails – 如何设置Amazon S3,回形针和ENV变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1232619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存