2012-07-02 39 views
5

Tôi đang theo dõi tutorial và mặc dù thêm nó vào tệp Gem và gói cài đặt hoạt động tốt. Khoảnh khắc tôi cố gắng đưa nó vào application.js, các tập tin, tôi nhận được lỗi sau khi tải nó:Đường ray không thể bao gồm AngularJS

throw Error("Sprockets::FileNotFound: couldn't find file 'angular'\n (in /my/path/to/rails/app/assets/javascripts/application.js:13)") 

application.js tập tin trông giống như vậy (bắt đầu với dòng 13):

//= require angular 
//= require jquery 
//= require jquery_ujs 
//= require jquery.ui.autocomplete 
//= require bootstrap 
//= require pusher.min.js 
//= require pusher_setup 
//= require_directory . 

Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể bao gồm thành công AngularJS vào dự án Rails của tôi?

Tôi hiện đang sử dụng Rails 3.2.2 và Ruby 1.9.3.

Trả lời

5

Tôi đã gặp phải sự cố tương tự. Tôi giải quyết nó bằng cách làm theo.

1) Trong trường hợp của tôi, //= require_tree . bị thiếu trong application.js tệp .. vì vậy tôi đã thêm nó.

2) Khởi động lại máy chủ Apache (Nếu webrick, sau đó khởi động lại nó)

+0

Hoàn hảo, cảm ơn bạn! – Hengjie

+0

Tôi vẫn đang điều tra những gì đã xảy ra, tuy nhiên, bởi ngoại hình của mọi thứ, một khi dòng đó được thêm vào application.js trong một thời gian, nó có thể được gỡ bỏ. Nghe có vẻ kỳ lạ, và tôi vẫn đang điều tra những gì đã thay đổi để cho phép nó hoạt động mà không cần require_tree. – Hengjie

+1

require_tree. sẽ dẫn đến việc bạn có một tệp đơn (application.js trong trường hợp này) giữ tất cả các tập lệnh của bạn có trong thư mục đó. – GBD

5

Sau khi thêm đá quý, bạn luôn phải khởi động lại máy chủ web.

Từ khi nhìn vào mã nguồn của đá quý, nó có các javascripts góc trong vendor/assets/javascripts, có nghĩa là chúng sẽ có sẵn chỉ bằng cách thực hiện //= require angular. Nếu họ không tải, có thể do máy chủ cần được khởi động lại và bạn cần phải cài đặt gói.

Đối với require_tree ., tôi khuyên bạn nên chống lại điều đó, bởi vì điều đó có nghĩa là bạn sẽ mất quyền kiểm soát thứ tự mà mọi thứ được tải.

Ví dụ góc cạnh được đóng gói với phiên bản jQuery riêng (jQuery-lite), nhưng nếu đã có jQuery khi nó được tải, nó sẽ sử dụng phiên bản toàn cầu.

có nghĩa là làm

//= reqiure angular 
//= require jquery 

sẽ làm điều gì đó khác nhau, hơn

//= require jquery 
//= require angular 

Có rất nhiều trường hợp khác khi thứ tự nạp có thể có vấn đề, ví dụ nếu bạn có Backbone.js và gạch dưới, bạn sẽ muốn tải gạch dưới trước xương sống, v.v.

Thông thường, tôi luôn khuyên bạn chỉ nên sử dụng require, trừ khi bạn đang tải mã riêng nơi đặt hàng không quan trọng, ví dụ: //= require_tree ./controllers cho thư mục bộ điều khiển của riêng bạn. Trong trường hợp đó tôi muốn nói require_tree hoàn toàn ổn.

+0

Thật lạ vì không có gì trong nhà cung cấp/tài sản/javascripts ngoài một tệp ẩn. Điều đó có nghĩa là bình thường sau khi đã thêm nó vào tệp Gem, gói đã cài đặt và khởi động lại quản đốc? – Hengjie

+0

@Hengjie nó sẽ không sao chép trong thư mục ứng dụng của bạn. Bản thân gem có một thư mục 'vendor/assets/javascripts' với tệp. –

2

Trong trường hợp bất kỳ ai gặp vấn đề tương tự và giải pháp được cung cấp sẽ không hoạt động. Tôi đã thêm //= require angular trong tài sản

group :assets do 
//= require angular 
end 

Tuy nhiên vẫn còn tôi đã nhận được báo lỗi tương tự. Sau một chút tìm kiếm, tôi phát hiện ra rằng vì lý do nào đó, cần phải thêm bên ngoài nhóm nội dung. Tất cả tốt bây giờ. Không chắc chắn nếu điều này là một cách tốt nhất mặc dù tôi không nhận được lỗi này nữa.

4

trong gemfile của bạn nếu bạn đang sử dụng như thế này:

group :assets do 
    gem 'angularjs-rails' 
end 

sau đó loại bỏ nhóm: tài sản điều, Nó phải là đơn giản mà không block:

ví dụ:

gem 'angularjs-rails' 

Nó chắc chắn sẽ hoạt động

+1

Nhưng tại sao nó không hoạt động trong nhóm tài sản? – kiddorails

+0

Trong phiên bản 4 ray, có thể có một số xung đột với tài sản cho đá quý này, cần phải kiểm tra –

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