2012-06-10 34 views
5

Đây là mô hình User tôi:Client Side validations không hoạt động trong sản xuất, nhưng hoạt động trong phát triển

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'

Mẫu:

<%= 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 %> 

Nó sẽ hoạt động khi bạn thoát ra khỏi lĩnh vực này, đây là một ảnh chụp màn hình của nó làm việc tại địa phương:

client_side_validation local

Nhưng khi tôi làm điều đó trong sản xuất, nó không hoạt động ở tất cả và tôi không thấy bất kỳ lỗi nào trong file log hoặc trong giao diện điều khiển JS.

Sửa 1:

điệp Validation không hiển thị lên.

Trong bản ghi Heroku, tôi thấy điều này bất cứ khi nào tôi thử một địa chỉ 'hợp lệ' email:

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 

Nhưng nó không chỉ cho tôi một tin nhắn trên trang của tôi như nó tại địa phương.

Ngoài ra, lần duy nhất tôi thấy yêu cầu HTTP trong nhật ký là khi tôi thử một chuỗi có cấu trúc email 'hợp lệ' - như [email protected]. Nhưng nếu tôi thử một cái gì đó như abc nó không cho tôi thông báo tôi mong đợi - invalid address - cũng như nhật ký không hiển thị bất cứ điều gì.

Chỉnh sửa 2:

Tôi đã cố gắng chạy máy chủ địa phương của tôi trong production mode và tôi đang nhìn thấy những vấn đề tương tự như trên Heroku. Vì vậy, có vẻ như vấn đề có thể không liên quan gì đến Heroku - mà là sản xuất.

Đây là HTML được tạo từ mẫu trong sản xuất:

<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> 

Sửa 3:

Đây là cách application.js tôi trông:

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

Và trong tôi application.html.erb tệp bố cục Tôi chỉ có một cuộc gọi JS đến application.js

Sửa 4:

tôi nghĩ rằng nó có thể là một tình huống mà kịch bản được tạo ra bởi JS client_side_validation không nhận ra đầu vào vì id là user_email và không user[email]. Vì vậy, tôi đã thay đổi id cho đầu vào thành user[email] và điều đó không giải quyết được.

Mọi người đều có bất kỳ suy nghĩ nào?

+0

Bạn có thể tải các trang web bằng cách sử dụng Firebug hoặc Web Inspector và sau đây lỗi nếu một? Nó có thể là mã js không chạy đúng cách. –

+0

Đồng thời thử đọc phản hồi của cuộc gọi AJAX (cho phép ghi nhật ký Yêu cầu/Phản hồi trong công cụ gỡ lỗi ưa thích của bạn). Nó cũng có thể là phản ứng điều khiển thay đổi trong sản xuất, nhưng nó có nhiều khả năng là một vấn đề js, không phải là một phụ trợ. –

+0

@lexor Tôi không thể tìm thấy bất cứ điều gì trong số bình thường, nhưng tôi không sử dụng Firebug quá nhiều, vì vậy tôi có thể thiếu một cái gì đó. Đây là một phiên bản sản xuất - http://falling-sunset-7904.herokuapp.com/ Nếu bạn gõ vào 'abc' và tab out, trong quá trình sản xuất bạn sẽ thấy 'không hợp lệ'. Trong Firebug, tôi thấy rằng thông tin jQuery đang được tải ... soo ... không chắc chắn những gì đang xảy ra. – marcamillion

Trả lời

2

Dự đoán tốt nhất là bài hát này theo đường dẫn nội dung. Một số đá quý khác có thể ngăn chặn nội dung được biên dịch chính xác.

Tôi không có một câu trả lời hoàn hảo cho bạn, nhưng các tài liệu Heroku có thể giúp đỡ một số ở đây: https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar

Các vấn đề liên quan