繁体   English   中英

用于暂存应用与生产应用的不同S3存储桶

[英]Different S3 buckets for staging app vs. production app

我有一个使用Amazon S3存储Paperclip附件的Rails应用程序。 我的database.yml文件为开发,测试和生产指定了不同的S3存储桶。

我在Heroku上有两个应用程序 - 一个生产应用程序和一个“临时应用程序”,用于在平台预启动时测试代码。

目前的系统存在一个重要缺陷 - 它使用相同的S3桶进行分段和生产。 如何设置我的系统以便它使用不同的存储桶,具体取决于我是否编写git push production mastergit push staging master

Heroku允许您通过持久环境变量配置您喜欢的任何内容,应用程序中的每个dyno / process都可以使用它。 环境变量不在同一应用程序的登台版和生产版之间共享。 利用这一点。

has_attached_file :photo, 
  :styles => ...,
  :path => ...,
  :storage => :s3,
  :bucket => ENV['S3_BUCKET'], # <--- over here
  :s3_credentials => {
    :access_key_id => ENV['S3_KEY'],
    :secret_access_key => ENV['S3_SECRET']
  }

然后:

# Configure the "staging" instance
$ heroku config:add \
    RACK_ENV=production \
    S3_KEY=my-staging-key \
    S3_SECRET=my-staging-secret \
    S3_BUCKET=my-staging-bucket \
    --app my-staging-app-name

# Configure the "production" instance
$ heroku config:add \
    RACK_ENV=production \
    S3_KEY=my-production-key \
    S3_SECRET=my-production-secret \
    S3_BUCKET=my-production-bucket \
    --app my-production-app-name

请注意,您的应用程序的每个实例都有一个RACK_ENV=production 不要使用Rails环境来区分应用程序的实例。 相反,您的应用程序应该期望使用环境变量来配置特定于实例的方面。

设置config:在您的暂存框中添加RACK_ENV = staging,然后在您的代码中,您可以根据环境指定存储桶。 例如:

if Rails.env.production?
    has_attached_file :photo, 
    :styles => ...,
    :path => ...,
    :storage => :s3,
    :bucket => 'your_prod_bucket',
    :s3_credentials => {
      :access_key_id => ENV['S3_KEY'],
      :secret_access_key => ENV['S3_SECRET']
    }
  else
    has_attached_file :photo, 
    :styles => ...,
    :path => ...,
    :storage => :s3,
    :bucket => 'your_staging_bucket',
    :s3_credentials => {
      :access_key_id => ENV['S3_KEY'],
      :secret_access_key => ENV['S3_SECRET']
    }

  end

这个heroku帖子似乎也暗示你可以通过使用不同的s3凭据进行分段和生产来实现这一点。 我猜你也必须在亚马逊方面做一些配置。 无论如何,看看它是否有帮助。 http://devcenter.heroku.com/articles/config-vars

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM