2014-12-31 1 views
0

프로덕션 데이터베이스의 미러링 인 스테이징 및 개발 환경을 실행합니다.Paperclip : Staging 프로덕션 버킷에서 읽을 수 있지만 다른 버킷에 쓸 수있는 앱?

S3에 업로드를 저장하기 위해 Paperclip gem을 사용합니다. 필자는 프로덕션 버킷에서 프로덕션 버전이 아닌 환경 (파일이 저장된 곳이기 때문에)을 허용하지만 다른 버킷에 쓰기를 허용하여 안전을 보장합니다. 또한 업로드가 완료되면 앱이 다른 버킷에서 읽는만큼 똑똑해야합니다.

이 방법이 있습니까?

답변

0

더 파고 나면 has_attached_filebucket 옵션에 proc을 사용할 수 있음을 발견했습니다.

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 
    } 
) 

관련 문서 :

http://www.rubydoc.info/github/thoughtbot/paperclip/master/Paperclip/Storage/S3 http://www.rubydoc.info/github/thoughtbot/paperclip/master/Paperclip/Attachment#dirty%3F-instance_method

0

나는 이것이 내가 Heroku를 사용하여 내 응용 프로그램을 호스팅하는 서버의 구성과 다른 구성 파일을 가지고 있다는 것을 알 수 있습니다.

1) 나는 변수/application.rb 이 파일을 필요로 설정에 설정/config.ym을 형성 설정/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라는 파일) 내가 읽은를 만들 수 있습니다. expand_path ('../ 부팅',FILE)에

require 'rails/all' 
# Require the gems listed in Gemfile, including any gems 
# you've limited to :test, :development, or :production. 
Bundler.require(:default, Rails.env) 

    module Appname 
     class Application < Rails::Application 
     config.before_initialize do 
      dev = File.join(Rails.root, 'config', 'config.yml') 
      YAML.load(File.open(dev)).each do |key,value| 
      ENV[key.to_s] = value 
      end if File.exists?(dev) 
     end 
     end 
    end 

다음설정 변수를 설정했습니다

도움이되기를 바랍니다.

+0

이 환경에 따라 버킷을 지정하는 것입니다. 버킷으로 쉽게 할 수 있습니다 : has_attached_file에 대한 ENV [BUCKET] 옵션. 나는 그것의 읽기 또는 쓰기 작업 여부에 따라 동적 버킷을 사용하려고합니다. – JBlake

+0

정말로 필요한 것은 단지'KEY'와'SECRET'입니다. 필요하다면'ENV [ 'BUCKET']'를 즉시 바꿀 수 있습니다. 나는 내 환경을 설정 한 사람을 보여주고있었습니다. – MZaragoza