मैं ऐप के माध्यम से एक्सेस करने के लिए अपने ऐप के दस्तावेज़ कैसे जोड़ूं, लेकिन सार्वजनिक निर्देशिका के माध्यम से नहीं? (इसलिए प्रमाणीकरण की आवश्यकता है) - रूबी-ऑन-रेल

अद्यतन करें:

मुझे यह त्रुटि मिल रही है:

(No route matches "/docs/index.html"... )

पहुंचने पर

admin.example.com/docs/index.html

फ़ाइल मौजूद है।

मेरे मार्गों में। आरबी फ़ाइल:

map.with_options(:conditions => {:subdomain => "admin"]}) do |subdom|
subdom.root :controller => "admin/subscriptions", :action => "index"
subdom.with_options(:namespace => "admin/", :name_prefix => "admin_", :path_prefix => nil) do |admin|
admin.connect "/docs/:id", :controller => :docs, :action => :get_file
end
end

और दस्तावेज़ नियंत्रक ऐप / नियंत्रकों / व्यवस्थापक /

उस नियंत्रक में एकमात्र विधि

def get_file
path = request.request_uri
send_file(path)
end

अंत अद्यतन

तो, मेरे पास सबडोमेन है, admin.example.com, कि मैं यार्ड जेनरेट किए गए दस्तावेज़ों को पीछे रखना चाहता हूं।

मैंने उन्हें केवल सार्वजनिक फ़ोल्डर में डालने की कोशिश की, और routes.rb फ़ाइल को संशोधित करने की कोशिश की, लेकिन दस्तावेज़ हमेशा उपलब्ध थे।

मैं इसे कैसे बना सकता हूं ताकि वे केवल admin.example.com में लॉग इन हो जाएं?

(दस्तावेज़ों में सभी href "सापेक्ष हैं, इसलिए, मुझे यकीन नहीं है कि मैं नियंत्रक का उपयोग कैसे करूं, या तो)

उत्तर:

उत्तर № 1 के लिए 1

यह आपकी विधि जैसा दिखना चाहिए:

def get_file
path = Dir[Rails.root.join("docs", params[:file_or_folder])]
if path.length > 0
# check if root directory
path_str = path[0]
if path_str =~ //docs/?z/
path_str += "/index.html"
end
render :file => path_str
else
render :text => "File Not Found"
end

end

और आपके रेल मार्ग इस तरह दिखना चाहिए:

map.connect "/docs/:file_or_folder", :controller => :docs, :action => :get_file, :file_or_folder => /.*/
map.resources :docs, :only => :get_file

जवाब के लिए 0 № 2

उन्हें सार्वजनिक फ़ोल्डर में न डालें।

उन्हें कहीं और पूरी तरह से रखें और उन्हें केवल प्रमाणित उपयोगकर्ताओं को स्ट्रीम करें।

ऐसा करने का एक तरीका है उपयोग send_file


जवाब के लिए 0 № 3

यहाँ "रों nginx और send_file का उपयोग करके जनता से फ़ाइलों की सुरक्षा कैसे कर सकते हैं इस पर एक अच्छा प्राइमर।


संबंधित सवाल
सबसे लोकप्रिय