Ruby on rails 回形针:可以从生产桶中读取,但可以写入不同桶的暂存应用程序?

Ruby on rails 回形针:可以从生产桶中读取,但可以写入不同桶的暂存应用程序?,ruby-on-rails,amazon-s3,paperclip,Ruby On Rails,Amazon S3,Paperclip,我运行一个暂存和开发环境,它是生产数据库的镜像 我使用回形针gem存储上传到S3的内容。为了安全起见,我想让不是生产环境的环境从生产存储桶中读取(因为文件存储在生产存储桶中),而是写入另一个存储桶。此外,如果上传,应用程序应该足够智能,现在可以从不同的存储桶读取数据 有什么方法可以实现这一点吗?我实现这一点的方法是,我有一个本地配置文件,它与我使用Heroku托管应用程序的服务器上的配置不同 1) 我创建了一个名为config/config.yml的文件 #S3 S3_KEY: 'xxxxxx'

我运行一个暂存和开发环境,它是生产数据库的镜像

我使用回形针gem存储上传到S3的内容。为了安全起见,我想让不是生产环境的环境从生产存储桶中读取(因为文件存储在生产存储桶中),而是写入另一个存储桶。此外,如果上传,应用程序应该足够智能,现在可以从不同的存储桶读取数据


有什么方法可以实现这一点吗?

我实现这一点的方法是,我有一个本地配置文件,它与我使用Heroku托管应用程序的服务器上的配置不同

1) 我创建了一个名为config/config.yml的文件

#S3
S3_KEY: 'xxxxxx'
S3_SECRET: 'xxxxxxxx'
S3_REGION: 'us-east-1'
S3_ASSET_URL: 'appname-dev.s3-website-us-east-1.amazonaws.com'
S3_BUCKET_NAME: 'appname-dev'
2) 我将变量从config/config.ym读入config/application.rb 需要文件。展开_路径(“../boot”,文件

require'rails/all'
#需要Gemfile中列出的宝石,包括任何宝石
#您仅限于:测试、开发或:生产。
Bundler.require(:default,Rails.env)
模块Appname
类应用程序
然后在Heroku上设置配置变量


我希望这能有所帮助

进一步挖掘后,我发现
bucket
选项已经附加了文件
可以执行一个过程

config/inititalizers/paperclip_defaults.rb

LIVE_BUCKET = 'media'
STAGING_BUCKET = 'media-demo'

Paperclip::Attachment.default_options.merge!(
  storage: :s3,
  path: 'assets/:class/:id/:attachment/:style.:extension',
  s3_credentials: "#{Rails.root}/config/s3.yml",
  s3_host_name: 's3-us-west-2.amazonaws.com',
  use_timestamp: false,
  bucket: proc { |attachment|
    (Rails.env.production? || !attachment.dirty?) ? LIVE_BUCKET : STAGING_BUCKET
  }
)
相关文件:


这是为每个环境指定存储桶。使用has_attached_文件的bucket:ENV['bucket']选项,我可以轻松做到这一点。我希望根据读操作还是写操作来使用动态bucket。您真正需要的只是
秘密
您可以随时更改
ENV['bucket']
,如果您需要,我只是告诉您我设置了我的环境
config/inititalizers/paperclip_defaults.rb

LIVE_BUCKET = 'media'
STAGING_BUCKET = 'media-demo'

Paperclip::Attachment.default_options.merge!(
  storage: :s3,
  path: 'assets/:class/:id/:attachment/:style.:extension',
  s3_credentials: "#{Rails.root}/config/s3.yml",
  s3_host_name: 's3-us-west-2.amazonaws.com',
  use_timestamp: false,
  bucket: proc { |attachment|
    (Rails.env.production? || !attachment.dirty?) ? LIVE_BUCKET : STAGING_BUCKET
  }
)