aws s3 api
因此,您已经开发了一个令人印象深刻的Rails APP,它可以显示图像库。 是时候通过Heroku在全球网络上发布它了。 当前在本地开发环境中上传的图像默认为本地psql。 在生产环境(Heroku)中,云存储服务存储图像。
通过流行的选择,AWS S3云服务将适合托管图像。 他们提供免费计划,但要注册该计划,则需要信用卡/借记卡。 以我的经验,设置AWS进行图像处理是一个挑战。 如果不谨慎的话; API密钥和机密将在Github上公开。
不道德的机器人正在四处寻找这些凭证,以利用计算资源。 因此产生了巨额账单。
由于Heroku不托管图片,因此Heroku的附加云服务Cloudinary可以托管。 它为Web应用程序的整个图像管理管道提供了解决方案。 Cloudinary提供了全面的API和管理功能。 很容易与Heroku上现有的或新的任何Web应用程序集成。 Cloudinary提供基于URL和HTTP的API。 这有助于与任何Web开发框架集成。
与设置单独的Cloudinary帐户相反。 到本文结尾,用户将通过Heroku上的rails应用程序上传图片。 在后端,图像上传到Cloudinary或从Cloudinary删除。 您的rails应用程序显示通过API交换在Cloudinary上托管的图像。 最好的部分是,Cloudinary不会要求您的信用卡注册10GB的免费存储空间。
作者的假设
进行以下假设:
- 您正在使用Heroku托管rails应用程序。
- Heroku CLI已安装在您的计算机上。
- 您的Rails应用程序已推送到Heroku。
Cloudinary本地和云设置
编辑您的Gemfile,添加以下行。
# ./gemfile
gem ‘carrierwave’
gem ‘cloudinary’
运行“运行捆绑包安装”以安装插入的gem。
登录Herokuapp页面,然后按如下所示单击该应用程序;
导航到“资源”。
在搜索框中找到并选择Cloudinary,如下所示;
选择“开始计划”以免费使用,然后单击设置。
现在,您将被重定向到Cloudinary管理页面。 通知生成的凭证。 复制云名称,API密钥,API机密和环境变量。
为了隐藏API密钥和机密,我们将代码保存在Github中。 首先,导航至设置,然后单击配置变量。 输入凭证(CL_ID,CL_key,Cloudinary_URL),如下所示;
在“ config”文件夹中创建一个cloudinary.yml文件。 复制模板并将其粘贴到新文件中。 将Cloud_name替换为Cloudinary管理控制台中找到的实际云名称。 此配置指定凭据以及其他属性。
# config/cloudinary.yml
---
development:
cloud_name: cloud_name
api_key: <%= ENV[ "CL_ID" ] %>
api_secret: <%= ENV[ "CL_KEY" ] %>
enhance_image_tag: true
static_file_support: false
production:
cloud_name: cloud_name
api_key: <%= ENV[ "CL_ID" ] %>
api_secret: <%= ENV[ "CL_KEY" ] %>
enhance_image_tag: true
static_file_support: true
test:
cloud_name: cloud_name
api_key: <%= ENV[ "CL_ID" ] %>
api_secret: <%= ENV[ "CL_KEY" ] %>
enhance_image_tag: true
static_file_support: false
如下创建一个初始化程序cloudinary.rb。 Rails服务器启动时,以下配置将生效。
Cloudinary.configdo |config|
config.cloud_name = 'cloud_name'
config.api_key = ENV[ "CL_ID" ]
config.api_secret = ENV[ "CL_KEY" ]
config.secure = true
config.cdn_subdomain = true
end
假设您已经建立了图像上传功能(如了解足够的教程中所示)。 设置Cloudinary的上传器,如下所示;
# app/uploader/picture.rb
class PictureUploader < CarrierWave::Uploader:: Base
include CarrierWave::MiniMagick
include Cloudinary::CarrierWave
# Specify dimensions for images to resize to for appropriate display fit
version :standard do
process :resize_to_fill => [ 400 , 400 , :north ]
end
# Cloudinary will be utilized in production (Heroku) while local psql stored us utilized in development and testing environment.
if Rails.env.production?
include Cloudinary::CarrierWave
CarrierWave.configure do |config|
config.cache_storage = :file
end
else
storage :file
end
# Cloudinary public file path to upload and display pictures
def store_dir
"uploads/ #{model. class .to_s.underscore} / #{mounted_as} / #{model.id} "
end
# Only files with extension jpg jpeg, gif and png will be uploaded
def extension_whitelist
%w[jpg jpeg gif png]
end
end
对于图像上传表单,请在前端视图上模拟以下erb表单;
# app/views/micropost/_form.html.erb
<%= form_with( model: @post, local: true ) do |form| %>
.
.
< span class = "picture" >
<%= form.file_field :picture , accept: 'image/jpeg,image/gif,image/png' %>
</ span >
.
.
<% end %>
对于图像显示,在前端视图上模拟以下erb标签;
# app/views/micropost/_feed.html.erb
<% @feeds.each do |p| %>
.
.
<%= image_tag p.picture.url if p.picture? %>
.
.
<% end %>
现在您已经完成了,将rails应用程序推送到Heroku并对其进行测试。
查看我的Gitbub Repo ,看看它是如何完成的。
aws s3 api