07/09/2018, 10:59

Rails: couldn't find file 'jquery' with type 'application/javascript'

Đây là một trong những lỗi phổ biến khi tích hợp Twitter Bootstrap với Rails 5 (hoặc bất cứ thư viện nào có jQuery là dependency). Khi gặp lỗi này bạn sẽ thấy trên Rails console thông báo lỗi hiển thị như sau: ActionView::Template::Error (couldn't find file 'jquery' with type ...

Đây là một trong những lỗi phổ biến khi tích hợp Twitter Bootstrap với Rails 5 (hoặc bất cứ thư viện nào có jQuery là dependency). Khi gặp lỗi này bạn sẽ thấy trên Rails console thông báo lỗi hiển thị như sau:

ActionView::Template::Error (couldn't find file 'jquery' with type 'application/javascript'
Checked in these paths: 
  /Users/macdevil/accounts/app/assets/config
  /Users/macdevil/accounts/app/assets/images
  /Users/macdevil/accounts/app/assets/javascripts
  /Users/macdevil/accounts/app/assets/stylesheets
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/coffee-rails-4.2.2/lib/assets/javascripts
  /Users/macdevil/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/actioncable-5.1.2/lib/assets/compiled
  /Users/macdevil/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/actionview-5.1.2/lib/assets/compiled
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/turbolinks-source-5.0.3/lib/assets/javascripts
  /Users/macdevil/accounts/node_modules
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/react-rails-1.11.0/lib/assets/react-source/development
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/react-rails-1.11.0/lib/assets/javascripts
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/bootstrap-sass-3.3.7/assets/javascripts
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/bootstrap-sass-3.3.7/assets/fonts
  /Users/macdevil/.rvm/gems/ruby-2.4.0/gems/bootstrap-sass-3.3.7/assets/images):

Trong bài viết ngắn này tôi sẽ hướng dẫn bạn cách khắc phụ lỗi trên. Nhưng trước hết tôi nghĩ bạn cần biết nguyên nhân tại sao lỗi này xuất hiện trong Rails 5 trong khi nếu là Rails 4 thì vẫn chạy vẫn bình thường không vấn đề gì.

Khác Biệt Giữa Rails 5 và Rails 4

Một trong những điểm khác biệt giữa Rails 5 và Rails 4 đó là hàm hỗ trợ Unobtrusive JavaScript có tên là rails-ujs. Trong Rails 5 hàm rails-ujs này được viết lại và jQuery không còn là dependency của Rails nữa. Chính vì điều này khi sử dụng jQuery trong ứng dụng bạn sẽ gặp phải lỗi trên:

//= require jquery
//= require bootstrap-sprockets

Cách Fix Lỗi

Các fix lỗi trên khá đơn giản bạn chỉ cần cài đặt gem jQuery cho Rails. Trên IDE bạn mở tập tin Gemfile của ứng dụng và thêm dòng lệnh sau:

gem 'jquery-rails', "~> 2.3.0"

Bạn có thể thay đổi lại phiên bản jQuery ở câu lệnh trên để phù hợp với nhu cầu sử dụng.

Tiếp theo chạy Bundle cài đặt Gem mới được thêm vào:

bundle install

Cuối cùng khởi động lại ứng dụng và truy cập lại trang bị lỗi để kiểm tra lại.

Happy Coding!!!

0