2012-06-10 12 views
5

में काम करता है यह मेरा User मॉडल है:क्लाइंट साइड सत्यापन उत्पादन में काम नहीं करता है, लेकिन विकास

class User < ActiveRecord::Base 
    rolify 
    devise :database_authenticatable, :registerable, :token_authenticatable, :confirmable, :timeoutable, 
     :recoverable, :rememberable, :trackable, :validatable, 
       :email_regexp => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i 

    attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :confirmed_at, :confirmation_token 
    validates_uniqueness_of :email, :case_sensitive => false 
    validates_confirmation_of :password 

end 

Gemfile:

gem 'client_side_validations'

प्रपत्र:

<%= form_for(resource, :as => resource_name, :class => "send-with-ajax", :url => user_registration_path(resource), :validate => true, :html => { :id => 'user_new' }) do |f| %> 
       <%= f.text_field :email,:placeholder => "[email protected]", :input_html => {:autofocus => true}, :validate => true %> 
       <%= f.submit :label => "Submit", :value => "Sign Me Up!" %> 
     <div class="ajax-response"><%= devise_error_messages! %></div> 
      <% end %> 

जब आप फ़ील्ड से बाहर टैब करते हैं तो यह काम करना चाहिए, यहां इसका एक स्क्रीनशॉट है स्थानीय स्तर पर काम कर रहे:

client_side_validation local

लेकिन जब मैं उत्पादन में यह करना, यह सब पर काम नहीं करता है और मैं लॉग फ़ाइल में या जे एस कंसोल में किसी भी त्रुटि नहीं दिख रहा।

संपादित करें 1:

मान्यता संदेशों दिखाई नहीं दे रहे।

Heroku लॉग में, मैं यह देख जब भी मैं एक 'वैध' ईमेल पता का प्रयास करें:

2012-06-10T18:44:55+00:00 app[web.1]: Started GET "/validators/uniqueness?case_sensitive=false&user%5Bemail%5D=abc%40tell.com" for xx.xxx.xx.x2 at 2012-06-10 18:44:55 +0000 
2012-06-10T18:44:55+00:00 heroku[router]: GET myapp.heroku.com/validators/uniqueness?case_sensitive=false&user%5Bemail%5D=abc%40tell.com dyno=web.1 queue=0 wait=0ms service=221ms status=404 bytes=4 

लेकिन यह मुझे मेरे पृष्ठ पर एक संदेश प्रदर्शित नहीं करता है जैसे कि यह स्थानीय स्तर पर करता है।

साथ ही, केवल एक बार जब मैं देखता हूं कि लॉग में HTTP अनुरोध तब होता है जब मैं एक स्ट्रिंग का प्रयास करता हूं जिसमें 'वैध' ईमेल संरचना होती है - जैसे [email protected]। लेकिन अगर मैं abc जैसे कुछ कोशिश करता हूं तो यह मुझे वह संदेश नहीं देता है जो मुझे उम्मीद है - invalid address - न ही लॉग कुछ भी दिखाता है।

संपादित करें 2:

मैं production mode में अपने स्थानीय सर्वर चल रहा की कोशिश की और मैं Heroku पर के रूप में ही इस मुद्दे को देख रहा हूँ। तो ऐसा लगता है कि इस मुद्दे को हेरोकू के साथ कुछ भी नहीं करना चाहिए - बल्कि उत्पादन।

<form accept-charset="UTF-8" action="/users" class="formtastic user" data-validate="true" id="user_new" method="post" novalidate="novalidate"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="kQid^%&^%jhgdsjhgfxmw4=" /> 
       <input data-validate="true" id="user_email" input_html="{:autofocus=&gt;true}" name="user[email]" placeholder="[email protected]" size="30" type="text" /> 
       <input label="Submit" name="commit" type="submit" value="Sign Me Up!" /> 
</form><script>window['user_new'] = {"type":"Formtastic::FormBuilder","inline_error_class":"inline-errors","validators":{"user[email]":{"presence":{"message":"can't be blank"},"uniqueness":{"message":"has already been taken","case_sensitive":false},"format":{"message":"is invalid","with":/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,"allow_blank":true}}}};</script>    </div> 

संपादित करें 3::

यह कैसे मेरे application.js लग रहा है:

यह उत्पादन में फार्म से उत्पन्न HTML है

//= require jquery 
//= require jquery_ujs 
//= require rails.validations 
//= require_tree . 

और मेरी application.html.erb लेआउट फ़ाइल में मेरे पास सिर्फ एक जेएस कॉल है। Js

संपादित 4:

मैं यह सोचा एक स्थिति है जहाँ client_side_validation द्वारा उत्पन्न जे एस स्क्रिप्ट इनपुट पहचान नहीं कर रहा क्योंकि आईडी user_email और नहीं user[email] है हो सकता है। इसलिए मैंने user[email] पर इनपुट के लिए id बदल दिया और इसे हल नहीं किया।

किसी के पास कोई विचार है?

+0

आप Firebug या वेब निरीक्षक और यहाँ पोस्ट एक यदि त्रुटि का उपयोग कर वेबपृष्ठ को लोड कर सकते हैं? यह जेएस कोड हो सकता है जो ठीक से नहीं चल रहा है। –

+0

AJAX कॉल की प्रतिक्रिया पढ़ने का प्रयास करें (अपने पसंदीदा डीबगिंग टूल में अनुरोध/प्रतिक्रिया लॉगिंग सक्षम करें)। यह उत्पादन में परिवर्तित नियंत्रक प्रतिक्रिया भी हो सकता है, लेकिन यह एक जेएस मुद्दा होने की संभावना है, बैकएंड नहीं। –

+0

@lexor मुझे सामान्य से कुछ भी नहीं मिला, लेकिन मैं फायरबग का बहुत अधिक उपयोग नहीं करता, इसलिए मुझे कुछ याद आ रहा है। यहां एक उत्पादन संस्करण है - http://falling-sunset-7904.herokuapp.com/ यदि आप 'abc' टाइप करते हैं और टैब आउट करते हैं, तो उत्पादन में आपको' अमान्य 'देखना चाहिए। फायरबग में, मुझे लगता है कि jQuery जानकारी लोड हो रही है ... तो ... सुनिश्चित नहीं है कि क्या हो रहा है। – marcamillion

उत्तर

2

सर्वश्रेष्ठ अनुमान यह है कि यह संपत्ति पाइपलाइन पर ट्रैक करता है। कुछ अन्य रत्न संपत्तियों को सही ढंग से संकलित करने से रोक सकते हैं।

मैं तुम्हारे लिए एक आदर्श उत्तर नहीं है, लेकिन Heroku डॉक्स कुछ मदद यहाँ से हो सकता है: https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar

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