gpt4 book ai didi

ruby-on-rails-3 - 在我们的 Rails3/Heroku 应用程序中设置 Paperclip + AWS S3 以存储图像时遇到问题

转载 作者:行者123 更新时间:2023-12-04 07:03:38 25 4
gpt4 key购买 nike

我们已经构建了一个 Rails 应用程序,它有多个用户和每个用户的图像。在我们的本地主机上完成所有的开发工作,我们有用户和照片的工作种子......但是现在我们正在尝试使用 S3 进行图像存储,我们在......总是在“种子”期间遇到错误迁移的步骤,执行此操作时:

rake db:migrate:reset



为这个问题道歉,但我们已经为此努力了 11 个小时,已经完成了关于该主题的所有相关 Stack 问题。很多类似的帖子都有 NoSuchBucket 错误和其他类型的问题,但我们建议的更改都没有解决我们的问题......也许它与我们正在使用的最新版本的 gems 有关?

我们正在使用 Rails 3.0.4、Ruby 1.8.7、Paperclip 2.3.8、aws-s3 0.6.2

我们正在使用/migrate/文件夹中的 seed.rb 文件为初始用户添加种子,并为每个用户添加一张照片。在本地机器上存储文件和图像(使用回形针,但不是 S3)时,这总是很有效。我们还测试了删除种子文件并使用工作应用程序创建一个新用户并得到了相同的错误:

Credentials are not a path, file, or hash



对于用户模块,我们已经测试了通过 (a) yml 文件和 (b) 直接在用户模型中设置以下 S3 key 的选项。
access_key_id: ' secret '
secret_access_key: ' secret '

我们已经尝试从我们的本地主机(尚未在 heroku 上运行)执行此操作,并且我们还尝试通过 Heroku 运行此操作。

我们似乎已经尝试了这些键布局的所有排列,但我们最常遇到的错误是:

can't convert Module into Hash



谷歌搜索此错误消息返回零结果,因此我们不知道那里发生了什么。这是最令人沮丧的部分......似乎每一次尝试都让我们回到了这个错误。

我们也尝试了这两种方法:

(1) 硬编码用户模型中的访问 key ,都像这样:
:access_key_id => ENV['accesskeyid'],
:secret_access_key => ENV['secretaccesskey'],

在这种情况下,我们经常会得到这个错误:

You did not provide both required access keys. Please provide the access_key_id and the secret_access_key.



令人沮丧,因为我们总是列出两个项目,测试有无引号,更改订单等。

我们尝试了(a)使用 ENV['accesskeyid'] 和(b)没有那些......简单
blahblah => 'accesskeyid'。

(2) 将 key 放入 yml 文件中,如下所示:
has_attached_file :photo,
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => "/:photo/:filename"

在 yml 文件中使用:
development:
access_key_id: accesskeyid
secret_access_key: secretaccesskey
bucket: ourbucketname
production:
access_key_id: accesskeyid
secret_access_key: secretaccesskey
bucket: ourbucketname

我们在键周围用单引号尝试了这个,没有。

我们还尝试在模型中定义存储桶,而不是在 yml 文件中,并得到相同的错误。

(3),这样设置:

if Rails.env == "production" S3_CREDENTIALS = { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'], :bucket => "ourbucket"} else S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end

has_attached_file :photo, :storage => :s3, :styles => { :small => "50x50>", :thumb => "75x75>", :medium => "400x400>"}, :path => "/:photo/:filename"



在我们的 yml 文件中具有相同的内容。

这给了我们这个错误:

credentials are not a file, path, or hash



自然地,我们四次检查我们是否拥有正确的访问 key (来自我们的 AWS 账户)并测试了几种不同的设置哈希的方法,但始终没有得到我们想要的。

这是 Gemfile 的相关部分:
gem 'aws-s3', :require => 'aws/s3' #用于在亚马逊上存储图像
gem '回形针'

作为另一次尝试,我们尝试在 Gemfile 中使用 gem right_aws,但这导致了以下错误:

no such file to load -- aws/s3 (You may need to install the aws-s3 gem)



请注意,我们一直在执行所有这些操作,并且在从本地主机迁移时遇到了所有这些错误,而不是从实时 Heroku 应用程序迁移,但甚至无法通过这个简单的“种子用户”步骤。

目前,我们的存储桶名为 media.oururl.com。存储桶名称中有句点有问题吗?

我也想问问 Heroku 的人,但考虑到这个社区有多棒,我希望你们中的一个人知道我们做错了什么。

非常感谢 - 希望这有助于其他跟随我们的人。

最佳答案

很好的问题。不久前我花了很长时间处理类似的问题

主要问题是您需要将以下代码移动到它自己的初始化文件中:

if Rails.env == "production" 
S3_CREDENTIALS = { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'], :bucket => "ourbucket"}
else
S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end

然后,您应该将以下行添加到具有 *has_attached_file 的模型中:photo* 要添加的行是。
:s3_credentials => S3_CREDENTIALS,

这就是你之前所缺少的。

此外,当您声明您的存储桶名称时,请确保这是我们的标准。如果您使用其他位置之一,则必须适本地更新路径。

希望这可以帮助!

关于ruby-on-rails-3 - 在我们的 Rails3/Heroku 应用程序中设置 Paperclip + AWS S3 以存储图像时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com