2012-07-02 2 views
5

Я следую за этим tutorial, и, хотя добавление его в файл Gem и сборку пакетов, он отлично работает. В тот момент я пытаюсь включить его в application.js, файл, я получаю следующее сообщение об ошибке во время загрузки:Рельсы не могут включать AngularJS

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

application.js файл выглядит так (начиная с линией 13):

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

Поэтому, мой вопрос заключается в том, как я могу успешно включить AngularJS в проект Rails?

В настоящее время я использую Rails 3.2.2 и Ruby 1.9.3.

ответ

5

У меня была такая же проблема. Я решил это следующим образом.

1) В моем случае //= require_tree . отсутствовал в файле application.js .. поэтому я добавил его.

2) перезапущен сервер Apache (если WEBrick, а затем перезапустить его)

+0

Отлично, спасибо! – Hengjie

+0

Я все еще изучаю, что произошло, однако, при взгляде на вещи, как только эта строка добавляется в application.js какое-то время, ее можно удалить. Это звучит странно, и я все еще изучаю, что изменилось, чтобы он работал без require_tree. – Hengjie

+1

require_tree. приведет к тому, что у вас будет один файл (application.js в этом случае), содержащий все ваши скрипты, которые есть в папке. – GBD

5

После добавления камня вы всегда должны перезапустить веб-сервер.

От взгляда на исходный код драгоценного камня у него есть угловые javascripts в vendor/assets/javascripts, что означает, что они будут доступны, просто сделав //= require angular. Если они не загружаются, возможно, это связано с тем, что сервер необходимо перезапустить, и вам нужно связать установку.

Что касается require_tree ., я настоятельно рекомендую это, потому что это означает, что вы потеряете контроль над порядком загрузки.

Например Угловые сам упакован с его собственной версией JQuery (JQuery-Lite), но если уже есть Jquery присутствует, когда он загружен, он будет использовать глобальной версии.

Что означает делать

//= reqiure angular 
//= require jquery 

будет делать что-то другое, чем

//= require jquery 
//= require angular 

Есть много других случаев, когда порядок загрузки может иметь значение, например, если у вас есть Backbone.js и подчерк, вы захочет загрузить Underscore перед базовой сетью и т. д.

В качестве общей практики я бы всегда рекомендовал использовать только require, если вы не загружаете свои собственный код, где порядок не имеет значения, например //= require_tree ./controllers для вашего собственного каталога контроллеров. В этом случае я бы сказал, что require_tree в порядке.

+0

Странно, потому что в поставщиках/активах/javascripts нет ничего, кроме одного скрытого файла. Является ли это нормальным, добавив его в файл Gem, установленный пакет и перезапущенный мастер? – Hengjie

+0

@Hengjie он не будет копировать в вашем приложении rails direclty. Сам же камень имеет каталог «vendor/assets/javascripts» с файлом. –

2

Если у кого-то была такая же проблема, и предлагаемое решение не сработало. Я добавил //= require angular в активе

group :assets do 
//= require angular 
end 

Однако до сих пор я получаю ту же ошибку. После небольшого поиска я узнал, что по какой-то причине это должно быть , добавленное за пределами группы активов. Теперь все хорошо. Не уверен, что это лучший способ, хотя я больше не получаю эту ошибку.

4

в вашем Gemfile, если вы используете так:

group :assets do 
    gem 'angularjs-rails' 
end 

затем удалить эту группу: активы вещь, это должно быть просто без блока:

например:

gem 'angularjs-rails' 

It обязательно будет работать

+1

Но почему он не работает в группе активов? – kiddorails

+0

В рельсах 4 версии, может быть, есть конфликт с активами для этого драгоценного камня, нужно проверить –

Смежные вопросы