2010-06-01 12 views
17

में पूर्ण (आधार) यूआरएल जाओ, मैं एकअभी सिनात्रा

get '/' do 
    set :base_url, "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}" 
    # ... 
    haml :index 
end 

Haml index.haml में options.base_url उपयोग करने के लिए सक्षम होने के लिए करते हैं। लेकिन मुझे यकीन है कि ऐसा करने का एक बेहतर, DRY, तरीका है। फिर भी मैं नहीं देख सकता, न ही इसे ढूंढ सकता हूं। (मैं सिनात्रा के लिए नया हूं :))

किसी भी तरह, के बाहर प्राप्त करें, मेरे पास request.env उपलब्ध नहीं है, या ऐसा लगता है। तो इसे शामिल करने में शामिल नहीं किया गया।

आप अपना बेस यूआरएल कैसे प्राप्त करते हैं?

+0

कैसे है 'शुष्क नहीं options.base_url' (rack/request.rb पर एक नज़र डालें) प्राप्त कर सकते हैं? – Adrian

उत्तर

24

कुछ चीजें।

  1. set एक वर्ग स्तर विधि, आप एक समस्या है प्रत्येक अनुरोध ऊपर
  2. साथ पूरे एप्लिकेशन के राज्य संशोधित कर रहे हैं क्योंकि संभावित आधार यूआरएल विभिन्न अनुरोधों पर अलग हो सकते हैं, जिसका मतलब है है जैसे http://foo.com और https://foo.com या यदि आप अनेक डोमेन एक ही अनुप्रयोग सर्वर पर बताया है डीएनएस

का उपयोग कर एक बेहतर रणनीति एक सहायक

helpers do 
    def base_url 
    @base_url ||= "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}" 
    end 
end 
परिभाषित करने के लिए हो सकता है 210

यदि आपको प्रश्नों के उत्तर देने के बाहर बेस यूआरएल की आवश्यकता है (प्राप्त/पोस्ट/हटाएं/हटाएं ब्लॉक या दृश्य में नहीं), तो इसे मैन्युअल रूप से कहीं भी सेट करना बेहतर होगा।

+0

धन्यवाद। मैंने मददगारों के बारे में पढ़ा, लेकिन उस गहराई से गोता लगाने के लिए काफी दूर नहीं गए। धन्यवाद। ऐसा लगता है कि जवाब वहां था :) – berkes

34

आप request.base_url का उपयोग कर भी = डी

+2

यह सबसे अच्छा तरीका प्रतीत होता है, क्योंकि स्रोत कोड मूल रूप से करता है जो अन्य उत्तर मैन्युअल रूप से करने का सुझाव देता है और महत्वपूर्ण रूप से बंदरगाह को वैकल्पिक रूप से शामिल करता है यदि यह गैर-डिफ़ॉल्ट है – stujo