我正在构建一个相当基本的Ruby on Rails应用程序,我将使用大约2000个图像,这是我第一次真正深入了解aws / s3。该应用程序不会有任何用户交互,所以我不确定是否最好将所有图像都放在应用程序上,然后将它们上传到我的存储桶,或者手动将它们添加到我的存储桶中,然后将它们下载到那里的应用程序。 AWS文档有点遍布。
我目前安装了carrierwave,不确定接下来的步骤应该是什么,或者如何将图像从S3检索到rails。我也将使用Heroku,但我已经使用我的AWS凭证设置了配置。
上传/ photo_uploader.rb
class PhotoUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def content_type_whitelist
/image\//
end
end
初始化/ carrierwave.rb
CarrierWave.configure do |config|
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: "AWS",
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"]
}
config.fog_directory = ENV["S3_BUCKET"]
end
答案 0 :(得分:0)
您需要在安装carrierwave
和fog-aws
后使用应用上传所有图片,然后您需要创建model
controller
和form
来上传图片
好的,目前你已经混淆了如何在上传后显示图片,对吗?
简单的说法是,如果图像正确上传,那么表格为images
,模型为Image
,列为picture
,因为您没有提供这些名称。
images_controller
class ImagesController < ApplicationController
def index
@images = Image.all
end
end
视图/图像/ index.html.erb
<% @images.each do |image| %>
<%= image_tag image.picture.url %>
<% end %>
注意强>
这不是为了宣传产品
如果您需要查看包含源代码的示例,那么这是BitBucket repository,这是live Heroku app和Stripe test card number必须提供类似{{1}的CVC代码等等。
答案 1 :(得分:0)
第一步是集成图像上传,您可以利用许多库来实现这一目标。
您希望获取dotenv-rails
gem,以便安全地管理AWS S3所需的凭据。这是生产就绪RoR应用程序的专用资源。
你想要的下一个宝石是carrierwave-aws
和carrierwave
宝石,它将管理所有东西,以及迄今为止的三颗宝石。第四个也是最后一个宝石是mini_magick
,这是使用carrierwave
提供的方法的必要条件。
第二步是注册AWS账户以使用S3存储桶。您无法在应用程序上显示图像,因为如果这样做,您将无法使用图像部署到Heroku。 Heroku将摆脱它们。
一旦您安装了这些宝石,就可以运行bundle install
,然后构建基本功能。
以下是有关carrierwave
的一些文档:https://github.com/carrierwaveuploader/carrierwave
上述链接中的文档将指导您如何正确安装carrierwave
。
所以你会做类似的事情:
rails generate uploader Photo
在photo_uploader.rb
文件中,您要取消注释此代码:
def extension_whitelist
%w(jpg jpeg gif png)
end
您希望此未注释充当您可以上传的文件类型的验证器。因此,如果它不是jpg jpeg gif png
RoR会抛出错误。这个白名单很方便,所以我强烈推荐它。
接下来,您必须在上传器和数据库之间设置映射。
因此,快速转发到您需要将AWS连接到您的应用的部分。这就是你的dotenv-rails
宝石进来的地方。顺便说一句,所有这些宝石都可以在rubygems.org找到。
在文件夹的根目录中,您将创建一个名为.env
的文件。
在.env
文件中,您将添加以下内容:
S3_BUCKET_NAME=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
永远不要将AWS密钥推送到任何代码库版本控制工具,如Github。
您想要进入.gitignore
文件并确保包含.env
文件。这样git就不会跟踪该文件。
要获取您的AWS凭据,请在AWS控制台中输入您的姓名并单击它,您将看到一个下拉列表
我的安全凭据
作为选项。
接下来,创建您的存储桶。
要测试与RoR应用程序的成功集成,请转到rails console
并运行以下命令:
ENV.fetch('S3_BUCKET_NAME')
如果您在此阶段收到错误,则可能需要转到config/application.rb
并添加:
require "dotenv-rails"
完成后,请返回rails c
然后再次运行ENV.fetch('S3_BUCKET_NAME')
,如果您正确执行了这些步骤,您应该好好去。
您应该有一个initializers
文件夹,并且在那里您将创建carrierwave.rb
文件。
在该文件的内部,您将粘贴本文档的 Usage 部分下的所有代码:
https://github.com/sorentwo/carrierwave-aws
返回您的photo_uploader.rb
文件,将storage :file
更改为storage :aws
。
首页拉伸到这里,返回carrierwave.rb
文件,您需要从上面的链接中复制和粘贴的内容中完全删除一行代码,这就是这一行:
config.asset_host = "http://example.com/
现在您可以启动rails server
而不是指向您的本地文件系统,它现在应该指向您的存储桶。