2011-12-08 15 views
5

के साथ सामग्री लोड करने के प्रयास के बाद 406 त्रुटि फेंकता है मैं अपने वेब ऐप को मोबाइल ब्राउज़र में देखने की अनुमति देने के लिए Railscast #199 का पालन कर रहा हूं। यह शानदार काम करता है, सिवाय इसके कि जब मैं मोबाइल संस्करण में यूजेएस का उपयोग कर एक टैबड इंटरफ़ेस में जानकारी तक पहुंचने का प्रयास करता हूं। टैब पर क्लिक करना वेब ऐप में काम करता है, लेकिन मोबाइल तरफ मुझे 406 त्रुटि मिलती है। (मैंने सफारी में आईफोन के रूप में उपयोगकर्ता एजेंट को सेट करने के बाद यह कोशिश की। मैंने आईओएस सिम्युलेटर और आईफोन पर भी परीक्षण किया। किसी भी समय कुछ भी लोड नहीं हुआ।)रेल 3: मोबाइल एमआईएम प्रकार जावास्क्रिप्ट

नीचे टैब में से किसी एक के लिए कोड है। क्या कोई मुझे यह जानने में मदद कर सकता है कि क्या हो रहा है? मेरा कोड यहाँ है।

यहाँ profiles_controller.rb में profile_about कार्रवाई है:

def profile_about 
    @profile = Profile.find(params[:id]) 
    respond_to do |format| 
    format.js { render :layout => nil } 
    end 
end 

मेरे profiles/show.mobile.erb (इस profiles/show.html.erb में के रूप में ठीक उसी कोड है):

<div id="tabs"> 
    <ul id="infoContainer"> 
    <li><%= link_to "Cred", profile_cred_profile_path, :class=> 'active', :remote => true %></li> 
    <li><%= link_to "About", profile_about_profile_path, :class=> 'inactive', :remote => true %></li> 
    </ul> 
    <div id="tabs-1"> 
    <%= render :partial => 'profile_cred' %> 
    </div> 
</div><!-- end tabs --> 

(नोट: मेरे पास है profiles/_profile_about.html.erb और profiles/_profile_about.mobile.erb के लिए एक फ़ाइल।)

यहाँ मेरी profiles/profile_about.js.erb है:

$("#tabs-1").html("<%= escape_javascript(render(:partial => 'profile_about'))%>"); 

मेरे Heroku 406 दिखा लॉग:

2012-03-08T03:02:55+00:00 app[web.1]: Started GET "/profiles/1/profile_about" for 98.218.231.113 at 2012-03-08 03:02:55 +0000 
2012-03-08T03:02:55+00:00 heroku[router]: GET myapp.com/profiles/1/profile_about dyno=web.1 queue=0 wait=0ms service=14ms status=406 bytes=1 
2012-03-08T03:02:55+00:00 app[web.1]: Processing by ProfilesController#profile_about as JS 
2012-03-08T03:02:55+00:00 app[web.1]: Parameters: {"id"=>"1"} 
2012-03-08T03:02:55+00:00 app[web.1]: Completed 406 Not Acceptable in 3ms 
2012-03-08T03:02:55+00:00 heroku[nginx]: 98.218.231.113 - - [08/Mar/2012:03:02:55 +0000] "GET /profiles/1/profile_about HTTP/1.1" 406 1 "http://myapp.com/profiles/1" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3" myapp.com 

tail -f logs/development.log चल रहा से:

Started GET "/profiles/1/profile_about" for 127.0.0.1 at Wed Mar 07 22:35:36 -0500 2012 
    Processing by ProfilesController#profile_about as JS 
    Parameters: {"id"=>"1"} 
    PK and serial sequence (5.4ms) SELECT attr.attname, seq.relname 
FROM pg_class seq, 
pg_attribute attr, 
pg_depend dep, 
pg_namespace name, 
pg_constraint cons 
WHERE seq.oid = dep.objid 
AND seq.relkind = 'S' 
AND attr.attrelid = dep.refobjid 
AND attr.attnum = dep.refobjsubid 
AND attr.attrelid = cons.conrelid 
AND attr.attnum = cons.conkey[1] 
AND cons.contype = 'p' 
AND dep.refobjid = '"goals_profiles"'::regclass 
    PK and custom sequence (2.5ms) SELECT attr.attname, 
CASE 
WHEN split_part(def.adsrc, '''', 2) ~ '.' THEN 
substr(split_part(def.adsrc, '''', 2), 
strpos(split_part(def.adsrc, '''', 2), '.')+1) 
ELSE split_part(def.adsrc, '''', 2) 
END 
FROM pg_class t 
JOIN pg_attribute attr ON (t.oid = attrelid) 
JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum) 
JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1]) 
WHERE t.oid = '"goals_profiles"'::regclass 
AND cons.contype = 'p' 
AND def.adsrc ~* 'nextval' 

    Profile Load (1.3ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."id" = '1' LIMIT 1 
Completed 406 Not Acceptable in 30ms 
+0

विकास के वातावरण सही में आप कर रहे हैं? लॉग/develop.log 500 के बारे में क्या कहता है? – brutuscat

+0

जब मैं आईफोन के उपयोगकर्ता एजेंट के साथ "बारे में" पर क्लिक करता हूं तो बस मेरे लॉग में जानकारी के साथ अपडेट किया जाता है। – tvalent2

उत्तर

0

में xhr अनुरोध की कमी की वजह से यह पता चला है तरीका। मुझे another question में जवाब मिला। तो prepare_for_mobile विधि नीचे जे एस काम करने के लिए अनुमति देता है:

def prepare_for_mobile 
    session[:mobile_param] = params[:mobile] if params[:mobile] 
    request.format = :mobile if mobile_device? && !request.xhr? 
end 
0

अपने कोड में कुछ कीड़े नहीं है, हो सकता है यह सिर्फ यहाँ स्वरूपण stackoverflow है, लेकिन भीतरी उद्धरण, बजाय "का 'होना चाहिए इस तरह:

$("#tabs-1").html("<%= escape_javascript(render(:partial => 'profile_about'))%>"); 

और यह लाइन अपने त्रुटि casuing है:

format.mobile.js {render :layout => nil} 

यह असंभव है क्योंकि अनुरोध में केवल एक ही माइम प्रकार हो सकता है। "मोबाइल" या "जेएस", दोनों नहीं। यदि आप जावास्क्रिप्ट से "profile_about" कार्रवाई का अनुरोध कर रहे हैं, तो आपको जेएस के साथ इसका जवाब देना होगा। "format.mobile" का उपयोग केवल "profile_about.mobile" टेम्पलेट को प्रस्तुत करने के लिए किया जाना चाहिए।

उम्मीद है कि कम से कम आपके लिए सही दिशा में एक कदम है।

+0

धन्यवाद। मैंने js.erb फ़ाइल को बदल दिया ताकि आंशिक दोहरे के बजाय सिंगल कोट द्वारा घिरा हुआ हो। और मैंने 'format.mobile.js' हटा दिया। हालांकि मुझे अभी भी '406 त्रुटि 'मिल रही है। मैं अपडेट के रूप में उपरोक्त मेरे लॉग में क्या पेस्ट करूंगा। – tvalent2

0

शायद आपके प्रश्न का पूरी तरह उत्तर न दें, लेकिन मुझे 406 स्थिति की समस्या हो रही थी, क्योंकि मैं अपने ऐप को फोनगैप पर तैनात कर रहा हूं! यह मूल रूप से हुआ क्योंकि अनुरोध प्रकार कार्रवाई में किसी भी रेल उत्तरदाताओं से मेल नहीं खाता था।

यह था जैसे:

respond_to do |format| 
    format.json { 
    render(json: (@parishes)) 
    } 
end 

जब से मैं केवल यह प्रयोग किया जाता JSON के responde को मैं बदल गया है और अब यह काम करता है:

render(json:(@parishes)) 

इस से निपटने के लिए एक और पूरी तरह से वास्तव में लगाने की है उस अनुरोध के लिए किस उत्तरदाता से पूछा जा रहा है, या

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