2014-04-03 5 views
1

저는 Rails에서 업로드 된 파일을 처리하기 위해 Paperclip을 사용하는 Rails 응용 프로그램을 보유하고 있습니다.Rails + Paperclips + Private CDN이 포함 된 Rackspace CloudFile

응용 프로그램은 현재 단일 서버에서 호스팅되며로드 밸런서, 응용 프로그램 서버 및 별도의 데이터베이스 서버로 확장 가능한 솔루션을 구축하고 있습니다. 마지막으로해야 할 일은 업로드 된 저작물에 대한 해결책입니다. Rackspace의 CloudFiles를 사용하려고 시도했지만 클립 클립과 CloudFiles를 사용하는 유일한 방법은 공용 CDN에 파일을 저장하는 것입니다. 사용할 수 없기 때문에 사용자는 파일에 액세스하려면 인증을 받아야합니다. Amazon S3를 사용하기 전에 임시 URL에 대한 옵션이 있으므로 CloudFiles를 Paperclip과 함께 사용하는 방법을 알고 파일에 액세스하려면 인증이 필요합니까?

도움말, 팁, Google 검색, 링크 또는 솔루션은 크게 감사하겠습니다.

+0

정말 흥미로운 질문/아이디어. Rackspace, Paperclip 및 Rials (v3.2.17)에서이 앱을 클라이언트 파일로 업로드하는 데이 동일한 설정을 사용하지만이 보안 조치를 구현하지 않아도됩니다. 안개 Github 사이트에서 개인 디렉토리를 만드는이 예제를 발견했습니다. https://github.com/fog/fog/blob/master/lib/fog/rackspace/examples/storage/create_private_directory.rb 너는 필요한 길을 찾았 니?) –

답변

1

구름 파일 also supports 임시 URL 생성 및 it appears that Paperclip does allow you to make use of it. 랙 스페이스의 임시 URL이 자신의 체크섬에있는 체계를 사용하지 않기 때문에

= image_tag @organization.logo.expiring_url(Time.now.to_i + 100, :original).gsub(/^http:/, "https") 

종이 클립,하지만, 당신이 회전하는 gsub 전화를 사용할 수 있습니다 only generate http urls합니다 : 그냥 뷰에서 #expiring_url 대신 #url으로 Attachment에서 URL을 생성 그것을 https URL로 변환합니다. 또한 #expiring_url의 첫 번째 인수는 절대 시간 스탬프 (초 - 이후 - 초)입니다. v1.18.0를 - - 랙 스페이스의 URL을 만료

은 다소 최근에 안개로 만들었다 그래서 당신은 이전 버전을 사용하는 경우, 당신은 그들을 활용하는 안개를 업그레이드해야 할 수 있습니다

bundle upgrade fog 

Paperclip도 generating obfuscated URLs을 지원합니다. 서버가 만료되지 않기 때문에 흥미롭지 만 덜 안전합니다.

+0

이봐, 응답 해 줘서 고마워. 그것은 나에게 거기에서 길의 대부분을 줬다. 이제 파일에 대한 실제 URL을 얻을 수 있지만 이미지가 "net :: ERR_CONNECTION_REFUSED"를로드하려고하면 오류가 발생합니다. 나는 rackspace_temp_url_key를 설정해야한다고 생각하지만 어떻게 될지 알 수 없다. 어떤 아이디어? – ehay

+0

페이퍼 클립은': fog :: storage'에': fog_credentials'를 그대로 전달하므로, 거기에 추가 할 수 있어야합니다 :': fog_credentials => {: provider => 'rackspace', ..., : rackspace_temp_url_key => ENV [ 'SUPER_SECRET_KEY']}' –

+0

temp url 키를 추가했지만 이제는 키를 설정하는 방법을 알 수 없습니다. – ehay

0

이 같은 키를 추가 할 수 있습니다

class Rackspace 

    def self.add_temp_url_key 
    require 'fog' 

    puts "Creating Storage Service" 

    begin 
     service = Fog::Storage.new(
     :provider => 'rackspace', 
     :rackspace_username => ENV['FOG_USERNAME'], 
     :rackspace_api_key => ENV['FOG_API_KEY'], 
     :rackspace_region => ENV['RACKSPACE_REGION'].to_sym 
    ) 

     service.post_set_meta_temp_url_key(ENV['RACKSPACE_TEMP_URL_KEY']) 
     puts "X-Account-Meta-Temp-Url-Key successfully set to #{ENV['RACKSPACE_TEMP_URL_KEY']}" 

    rescue => e 
     puts "Unable to set X-Account-Meta-Temp-Url-Key - #{e.inspect}" 
     puts e.backtrace 
    end 
    end 

end