Rails项目使用AWS s3存储图片

Step 1:s3注册及设置

1.先註冊 AWS 的帳號(需要Visa或MasterCard),註冊完登入

2.在右上角点你的帐号,选择我的安全凭证

3.根據 AWS 安全审查指南,我们强烈建议您创建 IAM 用户,而不是使用根访问密钥来完成 AWS 日常工作,所以我們這邊先建立一個 IAM 用户

3.1添加用户


3.2输入用户和选择访问类型

3.3设定权限


3.4下载key文件,之后会用

4.s3上创建存储桶Bcket



4.2输入存储桶名称,选择区域,我这里选择的日本,region需要填入ap-northeast-1

Step 2 Rails 设定

1 gemfile 添加两个gem

gem "figaro" # 用來管理機密資訊
gem "fog" # Ruby cloud services library
在终端中安装
bunle install
figaro install
会自动生成config/application.yml文件并加到 .gitignore (如果没有,就要手工加,一定要保证先加,然后再填写机密资料)

如果在atom里看不到这个文件,(atom显示.gitignore列表中的文件)[http://blog.qinfeng.io/posts/1180412]

打开你刚刚下载的 credentials.csv,在 config/application.yml 增加 Access Key Id 跟 Secret Access Key,別名可以自己取,這邊是 AWS_ACCESS_KEY_ID ,AWS_SECRET_ACCESS_KEY,AWS_BUCKET_NAME 存储桶名称。这我里加了
production和development是为了生产环境和开发环境都可以用到s3

2 新增 config/initializers/carrierwave.rb

config/initializers/carrierwave.rb
CarrierWave.configure do |config|
  if Rails.env.production? or Rails.env.development?
    config.storage :fog                       
    config.fog_credentials = {
      provider:              'AWS',                        
      aws_access_key_id:     ENV["AWS_ACCESS_KEY_ID"],      # 你的 key           


      aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],      # 你的 secret key         


      region:                'ap-northeast-1' # 你的 S3 bucket 的 Region 位置   


    }
    config.fog_directory  = ENV["AWS_BUCKET_NAME"] # 你设定的 bucket name 



  else
    config.storage :file
  end
end

Region位置 http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region 对应表
日本东京对应ap-northeast-1

在你的image_uploader.rb把storage :file註解掉

到这一步,你在项目在本地测试环境中上传图片都直接存到s3了

项目上传到heroku

修改gemfile文件
gem 'sqlite3' 移动到 gem 'bybug'的下一行
在gemfile末尾添加

group :production do 
  gem 'pg'
end

heroku login

heroku create APP_NAME APP_NAME = 你想要取的名字 如果重名就换一个

figaro heroku:set -e production 把application.yml机密信息推到heroku

git push heroku story-5:master

heroku run rake db:migrate

Comments

comments powered by Disqus