14
लिए precompiled संपत्तियां अपलोड कैसे
  • मैं
  • मैं एक S3 मूल
  • मैं पहले ही अपनी CloudFront संपत्ति को config.action_controller.asset_host बदलने के साथ एक CloudFront वितरण बनाई गई एक रेल 3.2 एप्लिकेशन का उपयोग कर रहा
  • मैं Capistrano

मैं जानना चाहता हूँ, CloudFront करने के लिए अपने precompiled संपत्ति हर बार अपलोड करने के लिए कैसे मैंरेल CloudFront

०१२३५१६४१०६१ तैनात उपयोग कर रहा हूँ

उत्तर

18

S3 बाल्टी के लिए कोई जरूरत नहीं अमेज़न CloudFront अब "कस्टम मूल" का समर्थन करता है के रूप में नहीं है। ऐसा लगता था कि आपको मूल के रूप में एक एस 3 बाल्टी निर्दिष्ट करना था, लेकिन अब आप अपने रेल ऐप पर अपने क्लाउडफ़्रंट वितरण को इंगित कर सकते हैं।

http://aws.typepad.com/aws/2010/11/amazon-cloudfront-support-for-custom-origins.html

तो, तुम्हारे जाने के बाद एक वितरण है कि आपके सार्वजनिक रूप से सुलभ एप्लिकेशन में बताया है बनाते हैं, तो आप अपनी संपत्ति मेजबान उचित कॉन्फ़िग फ़ाइल में जैसे सेट उत्पादन.आरबी और आप दौड़ के लिए बंद हैं। एक मूल उप डोमेन के लिए CNAME recprds की स्थापना के बारे

http://ryantownsend.co.uk/post/13126016608/cloudfront-cdn-on-rails

बिट साथ भ्रमित नहीं होना है:

config.action_controller.asset_host = "url of your cloudfront distribution" 

यहाँ कैसे चीजों को कॉन्फ़िगर करने पर एक आधा सभ्य लेख है। यह केवल तभी प्रासंगिक है जब आप अमेज़ॅन के बजाय अपने स्वयं के सबडोमेन का उपयोग करना चाहते हैं।

+1

क्या आपका मतलब सार्वजनिक निर्देशिका है? – eveevans

+8

कस्टम उत्पत्ति जिस तरह से काम करती है क्लाउडफ़्रंट आपकी स्थिर सामग्री के प्रॉक्सी के रूप में कार्य करता है। क्लाउडफ़्रंट यूआरएल से स्थिर सामग्री की सेवा के लिए आप रेल को कॉन्फ़िगर करते हैं, लेकिन आप कुछ भी कॉपी नहीं करते हैं। फिर जब कोई उपयोगकर्ता क्लाउडफ़्रंट से स्थिर सामग्री का अनुरोध करता है, क्लाउडफ़्रंट कहता है, "मेरे पास वह फ़ाइल नहीं है, मैं इसे ऐप से प्राप्त करूंगा", यह आपकी साइट से फ़ाइल डाउनलोड करता है और फिर इसे पूरा करता है। तब से उस स्थिर वस्तु के सभी अनुरोधों पर क्लाउडफ़्रंट से आपके ऐप को परेशान किए बिना आते हैं। –

+0

यह कमाल है! स्पष्टीकरण के लिए धन्यवाद। – chourobin

14

एडब्ल्यूएस-S3 मणि स्थापित करने के बाद, आप अपने Capistrano नुस्खा के इस अंत में इस जोड़ सकते हैं:

set :cdn_user, "KEY ID" # This is called "CDN KEY API" for AWS 
set :cdn_api_key, "YOUR KEY SECRET" 
set :cdn_container, "bucket name" 

namespace :assets do 
    task :to_cdn do 
     require 'aws/s3' 
     AWS::S3::Base.establish_connection!(:access_key_id => cdn_user, :secret_access_key => cdn_api_key) 
     assets_dir = "#{shared_path}/assets" 
     Dir.glob(assets_dir + "/**/*").each do |file| 
     if !File.directory?(file) 
      cdn_filename = file.gsub(assets_dir,"assets") 
      AWS::S3::S3Object.store(cdn_filename, open(file) , cdn_container) 
     end 
     end 
    end 
end 

इस तरह एक ट्रिगर का उपयोग करना:

after "deploy:assets:precompile", "assets:to_cdn" 

तुम भी शुरू करने की आवश्यकता होगी

load 'deploy/assets' 

परिणाम:: के साथ अपने नुस्खा में कुछ बिंदु पर संकलन आपकी संपत्ति संकलन के अंत में, अपने सभी परिसंपत्तियों के लिए पर धकेल दिया जा रहे हैं एस 3, और आप क्लाउडफ्रंट से उन्हें एक्सेस करने में सक्षम होंगे।

आपको अपने सीडीएन यूआरएल को इंगित करने के लिए अपने कॉन्फ़िगरेशन/पर्यावरण/उत्पादन.आरबी को अपडेट करना होगा।

config.action_controller.asset_host = "http://assets.example.com" 
+0

धन्यवाद कीज, यह एक अच्छा समाधान है, लेकिन मुझे कोई संदेह नहीं है, जब मैं दोबारा तैनात करता हूं तो संपत्तियों को क्या खुशी होती है, मेरा मतलब है, क्या मुझे कैश संपत्ति या समाप्ति शीर्षलेखों में समस्या होगी? – eveevans

+0

संपत्ति उत्पादन में फिंगरप्रिंट हैं (एक एमडी 5 हैश नाम में जोड़ा गया है) ताकि आप एक ही फ़ोल्डर में अपनी संपत्ति के सभी संस्करणों को रख सकें। संपत्ति पाइपलाइन का जादू। यह अद्यतन पर कैशिंग समस्या को रोकता है: पुराने संस्करण जारी हैं, नया अभी भी उपलब्ध है। –

+0

आपको संपत्ति पाइपलाइन पर पूरा दस्तावेज़ भी पढ़ना चाहिए: http://guides.rubyonrails.org/asset_pipeline.html –

3

एक शानदार रूबी मणि है जो इसे AssetSync कहलाता है। यदि आप इसे turbo-sprockets से जोड़ते हैं, तो आप यह सुनिश्चित कर सकते हैं कि केवल नई या अपडेट की गई संपत्तियों को तैनात करने पर कॉपी किया गया हो।

+0

धन्यवाद, मैं इसे आज़मा दूंगा – eveevans