Carrierwave、雾、Amazon S3、Rails 4

2024-01-05

我正在尝试让 Carrierwave 与我的 Amazon S3 存储桶配合使用,但我的运气有点差。在我的config/initializers文件夹,我有一个名为,carrierwave.rb。该文件包含以下内容:

CarrierWave.configure do |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 = "#{Rails.root}/tmp/uploads"
  config.fog_directory  = ENV['AWS_S3_BUCKET']
  config.fog_public     = true
  config.fog_attributes = {'Cache-Control' => 'max-age=315576000'}
end

我正在使用宝石figaro作为容纳我的环境配置变量的机制。里面的application.yml,我定义ENV['AWS_ACCESS_KEY_ID'] , ENV['AWS_SECRET_ACCESS_KEY'], and ENV['AWS_S3_BUCKET'].

这三个变量似乎填充正确。使用 FTP 程序,我可以使用我在 中定义的访问密钥和秘密访问密钥连接到我的 amazon s3 实例application.yml文件。我已经三次检查我的public and secret键是正确的。

当尝试在 Rails 应用程序中执行上传时,我收到一条错误消息:

Expected(200) <=> Actual(403 Forbidden) response => #<Excon::Response:0x007fb29a862ac8 
@data={:body=>"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><
Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. 
Check your key and signing method.</Message>

为了解决这个问题,我也尝试过:

  1. 创建新的 Amazon S3 存储桶
  2. 手动将access_key_id/secret_access_key/fog_directory放入配置文件中。

这两个选项似乎都不起作用。当我创建一个新的 S3 存储桶并在config.fog_directory,我收到了同样的错误。

当我在中手动输入密钥和存储桶名称时carrierwave.rb文件,我仍然收到同样的错误。

我尝试在网上搜索一些答案,但大多数答案似乎是用户错误地输入了错误的访问密钥或秘密密钥。我不相信这里是这种情况,因为我已将密钥直接复制并粘贴到carrierwave.rb来自我在 Amazon 上的 S3 管理控制台的文件。

如果有人有任何见解或希望我尝试的事情,请随时发表评论。如果您需要更多信息,请告诉我,我会将其发布在这里。我的应用程序是一个 Rails 4 应用程序,具有以下功能:

gem 'carrierwave'
gem 'fog', github: 'fog/fog'
gem 'mini_magick'
gem 'figaro'

提前致谢!

编辑:一些补充:

我刚刚尝试创建一组新的密钥,并再次将密钥复制+粘贴到我的carrierwave.rb文件。我仍然收到同样的错误。我的文件现在内容如下:

CarrierWave.configure do |config|
  config.fog_credentials = {
      :provider               => 'AWS',
      :aws_access_key_id      => "***********",
      :aws_secret_access_key  => "***********"
  }

  config.cache_dir = "#{Rails.root}/tmp/uploads"
  config.fog_directory  = 'soawsthree'
  config.fog_public     = true
  config.fog_attributes = {'Cache-Control' => 'max-age=315576000'}
end

--

来自 S3 存储桶的响应。注意 - 下面列出的公共访问密钥是正确的。不确定秘密访问密钥传入何处?:

Expected(200) <=> Actual(403 Forbidden) response => #<Excon::Response:0x007fc6e3997008 @data={:body=>"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 70 6e 67 0a 46 72 69 2c 20 31 31 20 4f 63 74 20 32 30 31 33 20 30 34 3a 31 30 3a 34 31 20 2b 30 30 30 30 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 75 70 6c 6f 61 64 73 2f 70 68 6f 74 6f 2f 70 69 63 2f 33 2f 74 6f 75 63 68 2e 70 6e 67</StringToSignBytes><RequestId>22E53DA9E453D05E</RequestId><HostId>ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3</HostId><SignatureProvided>hiogXz0b65S/bOSWKvca7hyXzYI=</SignatureProvided><StringToSign>PUT\n\nimage/png\nFri, 11 Oct 2013 04:10:41 +0000\nx-amz-acl:public-read\n/uploads/photo/pic/3/touch.png</StringToSign><AWSAccessKeyId>AKIAIKNIDTDI2WI7RPNA</AWSAccessKeyId></Error>", :headers=>{"x-amz-request-id"=>"22E53DA9E453D05E", "x-amz-id-2"=>"ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Fri, 11 Oct 2013 04:10:34 GMT", "nnCoection"=>"close", "Server"=>"AmazonS3"}, :status=>403, :remote_ip=>"72.21.195.65"}, @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 70 6e 67 0a 46 72 69 2c 20 31 31 20 4f 63 74 20 32 30 31 33 20 30 34 3a 31 30 3a 34 31 20 2b 30 30 30 30 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 75 70 6c 6f 61 64 73 2f 70 68 6f 74 6f 2f 70 69 63 2f 33 2f 74 6f 75 63 68 2e 70 6e 67</StringToSignBytes><RequestId>22E53DA9E453D05E</RequestId><HostId>ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3</HostId><SignatureProvided>hiogXz0b65S/bOSWKvca7hyXzYI=</SignatureProvided><StringToSign>PUT\n\nimage/png\nFri, 11 Oct 2013 04:10:41 +0000\nx-amz-acl:public-read\n/uploads/photo/pic/3/touch.png</StringToSign><AWSAccessKeyId>AKIAIKNIDTDI2WI7RPNA</AWSAccessKeyId></Error>", @headers={"x-amz-request-id"=>"22E53DA9E453D05E", "x-amz-id-2"=>"ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Fri, 11 Oct 2013 04:10:34 GMT", "nnCoection"=>"close", "Server"=>"AmazonS3"}, @status=403, @remote_ip="72.21.195.65">

Fog 似乎正在使用“excon”来连接 S3 存储桶。我通过删除雾和 excon 0.27.2 解决了我的问题。我切换到carrierwave-awsgem(使用相同的凭据,一切都按预期工作)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Carrierwave、雾、Amazon S3、Rails 4 的相关文章

  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • Rails 递归地包含 javascripts 资源文件夹

    我了解如何将一个 JavaScript 文件添加到 Rails 资产管道中 只需添加 require filename 到 application js 但是如何在一个文件夹下包含多个 javascript 文件 vendor assets
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web
  • Rails 中的助手 - 构建 html 字符串时的最佳方法是什么?

    我通常这样写助手 def bloco vazio texto btn args titulo content tag h3 Vazio p content tag p texto content tag div titulo tag hr
  • 正常关闭 sidekiq 进程

    有谁知道如何找到 sidekiq 的 pidfile 来优雅地关闭它 跑步ps ax grep sidekiq然后运行sidekiqctl stop
  • 添加两个 ActiveRecord::Relation 对象[重复]

    这个问题在这里已经有答案了 如何将两个关系添加在一起 当我尝试 运算符时 它返回一个数组 但我需要它来返回关系 谢谢 麦克风 Try new relation relation merge another relation
  • 在 Yosemite 上安装 Ruby 1.9.2 时出错

    我在 Yosemite 上使用 rvm 安装 ruby 1 9 2 时遇到错误 有人可以帮助我吗 我更新了自制程序和rvm 我正在与其他人合作处理这个项目 所以我无法升级 ruby 我在下面放置了我的输出的链接 提前致谢 Kanyons M
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 更改 Active Storage 的默认 URL

    我们可以更改从活动存储创建的默认 永久 url 以重定向到 S3 类似于rails active storage representations 我不喜欢网址中的框架名称 Thanks UPDATE 最近 Rails 6 中增加了一个可配置
  • 如何将 devise/omniauth 重定向到我登录的页面?

    我通过omniauth 进行了身份验证 并且该链接通过layout application html haml 在每个页面上都可用 然而 当他们完成omniauth身份验证后 他们都会进入root权限 我如何设置它 以便他们重定向到他们单击
  • 如何将stepfunctionexecutionId解析为SageMaker批量转换作业名称?

    我创建了一个步骤函数 该状态机的定义如下 step function json 在 terraform 中使用 使用本页中的语法 https docs aws amazon com sagemaker latest APIReference
  • 在生产环境中使用 Rails 设置 sunspot solr

    我尝试了各种链接 但我似乎找不到关于创建与生产中的 Rails 一起运行的 solr 实例的好资源 我知道您必须为生产设置 solr 服务器 我已经尝试使用 tomcat 设置 solr 但我似乎无法将其链接到 Rails 应用程序 有什么
  • 无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

    尝试将 NOT NULL 列添加到现有表时出现以下错误 为什么会发生这种情况 我尝试了 rake db reset 认为现有记录是问题所在 但即使重置数据库后 问题仍然存在 你能帮我解决这个问题吗 迁移文件 class AddDivisio
  • 从数组中删除空白元素

    当我从 ruby on Rails 表单中保存多个选择时 它似乎在前面添加了一个空白元素 我该如何删除它 该字段为 selected player utf8 gt authenticity token gt H8W7qPBezubyeU0a
  • 为什么我的 CloudFormation 脚本无法下载文件?

    我需要在 Windows 实例初始化期间下载文件 为了测试这一点 我使用以下脚本来下载 Google 徽标 使用简化版本的Windows 角色和功能模板 https s3 amazonaws com cloudformation templ
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • 使用 Mountain Lion、Xcode 4.5 和 RVM 安装 Ruby?

    rvm install 1 9 3 with gcc clang 根据建议无法使用 RVM 在 Lion 下安装 Ruby GCC 问题 https stackoverflow com questions 8032824 cant inst
  • 将记录批量插入到 Active Record 表中

    我发现我的Model create 当我一次添加大量记录时 语句需要很长时间才能运行 看着ActiveRecord 导入 https github com zdennis activerecord import wiki但它不适用于哈希数组
  • “heroku”命令存在于以下 Ruby 版本中:

    我在使用 heroku 工具带时遇到了重大问题 我正在使用 cedar 14 堆栈 当我尝试使用不是的 ruby 版本时ruby 2 0 0 dev我收到这个错误 rbenv heroku command not found The her
  • 如何让 Sidekiq 在 Heroku 上运行?

    这是我第一次尝试让 Redis 在 Heroku 上运行 我添加了一个工作dyno 就在今天 所以还没有付款 添加了RedisToGo Nano附加组件 在我的本地机器上测试了后台作业 并将应用程序推送到heroku heroku ps g

随机推荐

  • 打开另一个目录中的文件 (Python)

    我一直对 Python 中目录遍历的主题感到困惑 并且有一种情况我很好奇 我想在与我当前所在目录基本平行的目录中访问一个文件 给定这个目录结构 parentDirectory subfldr1 testfile txt subfldr2 f
  • 如何将 javascript 函数中的参数字符串连接到附加 html 中的字符串?

    这是我的 html 代码 div div 然后我将输入附加到 content document ready function Handler for ready called var parameter p Hola p content a
  • 当函数参数是对 T 的 const 引用时,为什么 T 的模板参数推导会“跳过”数组元素的常量性?

    让我们考虑一下这些定义 full type information with typeid template
  • 整理声明的 SQL 变量

    我一直在看查找非 ASCII 字符的查询 https stackoverflow com a 3917698 241211 转载如下 select line patindex COLLATE Latin1 General BIN Line
  • match_parent 和 fill_parent 有什么区别?

    我对两个 XML 属性有点困惑 match parent and fill parent 看来两者是一样的 他们之间有什么区别吗 它们是同一件事 API 级别 8 使用match parent FILL PARENT 在 API 级别 8
  • Python 中使用 O_DIRECT 直接 I/O

    我是 python 新手 对于某些项目 我必须使用 python 进行某些 I O 我从一个简单的 python 代码开始 该代码使用 os 模块中的 open 方法 并且代码运行良好 usr bin python import os sy
  • Python - 如何更改按钮列表中一个按钮的颜色

    我正在尝试更改按钮的颜色 这是代码 for i in range 6 for j in range 6 if i 0 and j 0 grids6 tk Button mFrame bg blue highlightcolor black
  • 无法将 @IdClass 属性用于 @ManyToOne 关系

    我有一个Gfh i18n实体 具有复合键 IdClass Entity IdClass es caib gesma petcom data entity id Gfh i18n id class public class Gfh i18n
  • 如何设计 Spring MVC REST 服务?

    我希望客户端和服务器应用程序使用 REST 服务相互通信 我一直在尝试使用 Spring MVC 来设计它 我正在寻找这样的东西 客户端执行 POST 休息服务调用saveEmployee employeeDTO companyDTO 服务
  • 每个系统调用都会创建一个进程吗?

    每个系统调用都会创建一个进程吗 程序和操作系统的所有功能 例如中断 都是以进程的形式执行的吗 感觉这么大量的进程控制块 大量的进程调度浪费了很多资源 或者 系统调用的内核指令被视为当前的一部分 过程 简短的回答是 不完全是 但我们必须就所谓
  • Chrome 中的 HTML5 视频出现奇怪的渲染错误

    我正在尝试创建一些东西 当用户单击 HTML5 视频的微型版本时 会出现一个弹出窗口 其中显示视频的放大版本 有点像 Instagram 然而 似乎只有在 Chrome 中才会出现一个奇怪的错误 当我退出弹出窗口并通过单击毯子反复重新打开它
  • 如何检查数组是否已经排序

    那么如何做出这样的逻辑 int arr 2 5 3 if arr is sorted else Array sort 方法无效是很糟糕的 您不需要对数组进行排序来检查它是否已排序 循环遍历每对连续的元素并检查第一个元素是否小于第二个元素 如
  • 限制非管理员许可用户创建 PowerApps 环境的选项

    有什么方法可以限制许可用户创建环境吗 根据微软文档 拥有PowerApps或Flow P2许可证的用户可以进入管理中心并为其创建环境 此外 拥有社区计划许可证的用户还可以创建一个开发人员环境 但我们希望用户创建画布和模型驱动的应用程序以及
  • 如何让 jQueryUI 对话框动态加载内容

    我喜欢 jQueryUI 的对话框 但是 似乎没有一种方法可以动态加载内置内容 我想我必须使用其他方法来实现这一目标 iframe 仅在可见时才加载内容吗 这是正确的方法吗 如果其他对话框机制更适合仅在首次打开时加载内容 我愿意接受 这并不
  • 将 PySpark 数组列乘以标量

    我正在尝试将数组类型列乘以标量 该标量也是来自同一 PySpark 数据帧的值 例如 我有这个数据框 df sc parallelize 1 2 3 toDF l factor l factor 1 2 3 我想要实现的是 l factor
  • XMonad:有没有办法绑定同时触发的键和弦?

    Is there a way to make simultaneous key presses into a keybinding e g for the keys w e f when pressed within 0 05 second
  • 检测 CKEditor 5 中文本何时发生更改并且编辑器失去焦点

    我正在尝试在 CKEditor 5 中实现自动保存功能 只有在进行更改且编辑器失去焦点后才会进行保存 我怎么能这样做呢 该文档让我非常困惑 这是我得到的最接近的 function onChange el editor editor docu
  • 如何隐藏 dired 中的链接数量?

    99 9 的情况下 我并不关心有多少链接指向一个文件 如何让 dired 或者 ls 不显示链接数量 作为参考 ls l 的输出类似于 rw rw rw 1 root dir 104 Dec 25 19 32 file 在本例中 链接数为
  • PL/SQL 触发器从一张表上的 INSERT 更新另一张表

    我正在使用 SQL 和 Oracle 数据库 需要一些帮助 触发器是我很难理解的东西 当我向表 A 中插入一行时 我需要一个触发器 以便它更新表 B 上的行 特别是其主键与刚刚添加到表 A 的行的相应外键匹配的行 例如 表 A 中的 X 列
  • Carrierwave、雾、Amazon S3、Rails 4

    我正在尝试让 Carrierwave 与我的 Amazon S3 存储桶配合使用 但我的运气有点差 在我的config initializers文件夹 我有一个名为 carrierwave rb 该文件包含以下内容 CarrierWave