2012-06-15 11 views
5

के दौरान रेल 3 में सेट नहीं किया जा रहा है। मैं रेल 3 में प्रतिडोमेन सेट करने की कोशिश कर रहा हूं Ryan Bates screencast on subdomains। हालांकि यह मेरे लिए काम नहीं कर रहा है।request.subdomain सशर्त रूटिंग

# routes.rb 
constraints(Subdomain) do 
    get 'devices' => 'devices#all' 
end 

# lib/subdomain.rb 
class Subdomain 
    def self.matches?(request) 
    # binding.pry 
    request.subdomain.present? && request.subdomain == "admin" 
    end 
end 

यूआरएल admin.localhost:3000/devices मार्ग मुझे devices#all, हालांकि मैं एक मार्ग त्रुटि Routing Error No route matches [GET] "/devices" जाहिर है मेरे मार्ग काम नहीं कर रहा मिलना चाहिए लोड हो रहा है: मैं निम्नलिखित सेटअप है।

मैं सेटअप एक pry डिबग सत्र जहां टिप्पणी ऊपर है, और यह हिट हो जाता है, तो मेरे बाधा काम कर रहा है, लेकिन मैं निम्नलिखित उत्पादन प्राप्त करें:

[1] pry(Subdomain)> request.subdomain 
=> "" 
[2] pry(Subdomain)> request.subdomains 
=> [] 
[3] pry(Subdomain)> request.host 
=> "admin.localhost" 

तो रेल व्यवस्थापक उठा नहीं है यूआरएल का हिस्सा और इसे सबडोमेन वैरिएबल में रखकर। जबकि मैं आसानी से व्यवस्थापक मार्गों को फ़िल्टर करने के लिए मेजबान मान का उपयोग कर सकता हूं, मैं चीजों को साफ और सही रखना चाहता हूं।

रेल कैसे सबडोमेन मूल्य सेट नहीं कर रहे हैं?


संपादित

दोनों jdoe और coreyward उनके जवाब के साथ सही हैं। मुझे क्या फेंक रहा था यह था कि मैं साइट तक पहुंचने और एक ही त्रुटि प्राप्त करने के लिए pow और xip.io का भी उपयोग कर रहा था। जो अजीब था क्योंकि http://admin.app_name.192.168.1.68.xip.io/devices में एक tld है 1. 1. क्या हो रहा था कि xip के लिए सबडोमेन admin.app_name.192.168.1.68 था, जो मैचों के तर्क को भी विफल करता है और मार्ग नहीं देता है।

+0

> रेल कैसे सबडोमेन मूल्य सेट नहीं कर रहे हैं? मुझे लगता है कि यह अभी भी उस बिंदु पर रैक है। –

+0

@ ऑस्करडेलबेन यह नहीं है।यह एक्शनडिस्चैच 'request.inspect # =>

+0

+1 पॉव और Xip.io पर अतिरिक्त स्पष्टीकरण के लिए +1 है। :) – coreyward

उत्तर

9

क्योंकि रेलवे इसे मानते समय उपडोमेन नहीं है।

रेल उम्मीद करते हैं कि आप 1 से अधिक डॉट के साथ टीएलडी के लिए Top-Level Domain (टीएलडी) लंबाई प्रदान करें। उदाहरण के लिए, यदि आप bbc.co.uk यह होगा पिक "बीबीसी" था उप डोमेन के रूप में जब तक आप निर्दिष्ट टीएलडी लंबाई 2 है, जो मामले में उप डोमेन खाली होगा:

request.subdomain(2) #=> "" 

यह भी कारण है कि आप देख रहे हैं subdomains एक खाली सरणी वापस करें: पिछले दो सेगमेंट स्वचालित रूप से त्याग दिए जा रहे हैं। आप "व्यवस्थापक" वापस पाने के लिए टीएलडी लंबाई के रूप में 0 निर्दिष्ट कर सकते हैं, लेकिन वह कोड वास्तविक डोमेन नाम के साथ उत्पादन में टूट जाएगा, इसलिए मैं इसकी अनुशंसा नहीं करता हूं।

मैं admin.yourapp.dev जैसे डोमेन का उपयोग करने की अनुशंसा करता हूं जो आपके कंप्यूटर पर स्थानीयहोस्ट के माध्यम से वापस चलाया जाता है ताकि आपके ऐप को सबडोमेन का पता लगा सके। इसे बस करने के लिए बस/etc/hosts संपादित करें।

यदि आप उत्सुक हैं, here is the Rails source for the subdomain method

+0

उत्तर के लिए धन्यवाद। मैंने आपका सही चिह्नित किया क्योंकि मुझे एसओ पर पोस्ट करने से पहले सबडोमेन विधि के स्रोत को देखना चाहिए था। :एक्स –

5

विशेष पते का उपयोग कर प्रयास करें: http://admin.lvh.me:3000/devices

या सेट:

config.action_dispatch.tld_length = 0 
अपने development.rb में

और अपने अनुप्रयोग को पुनरारंभ करें।

+0

उत्तर के लिए धन्यवाद @jdoe। Admin.lvh.me को मारने से चीजों को बहुत साफ करने में मदद मिली। –

+0

सेटिंग action_dispatch_tld एक अच्छा सॉफ्टवेयर केवल समाधान है। मेरी जरूरतों के लिए काम करता है – Kevin

संबंधित मुद्दे