2012-07-02 12 views
5

Sto seguendo questo tutorial e sebbene aggiungendolo al file Gem e l'installazione di bundle funziona bene. Nel momento in cui cerco di includere nella application.js, il file, ottengo il seguente errore durante il caricamento:Rails non può includere AngularJS

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

application.js assomiglia in modo (a partire con la linea 13):

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

Pertanto, la mia domanda è: come posso includere con successo AngularJS nel mio progetto Rails?

Attualmente sto usando Rails 3.2.2 e Ruby 1.9.3.

risposta

5

Ho avuto lo stesso problema. L'ho risolto seguendo la strada.

1) Nel mio caso, //= require_tree . mancava nel file application.js .. quindi l'ho aggiunto.

2) riavviato Apache Server (Se webrick, quindi riavviarlo)

+0

Perfetto, grazie! – Hengjie

+0

Sto ancora indagando su cosa sia successo, tuttavia, dall'aspetto delle cose, una volta che la riga viene aggiunta a application.js per un po ', può essere rimossa. Sembra strano, e sto ancora indagando su cosa è cambiato per consentirgli di funzionare senza require_tree. – Hengjie

+1

require_tree. risulterà in te con un singolo file (application.js in questo caso) contenente tutti gli script presenti nella cartella. – GBD

5

Dopo l'aggiunta di una gemma devi sempre riavviare il server web.

Dall'esame del codice sorgente della gemma, ha i javascript angolari in vendor/assets/javascripts, il che significa che saranno disponibili semplicemente facendo //= require angular. Se non vengono caricati, è probabilmente perché il server deve essere riavviato e devi installare l'installazione in bundle.

Per quanto riguarda lo require_tree ., sconsiglio vivamente di farlo, perché significa che perderete il controllo sull'ordine in cui le cose vengono caricate.

Ad esempio si angolare è confezionato con la propria versione di jQuery (jQuery-lite), ma se c'è già jQuery presente quando è caricato, userà la versione globale.

Il che significa fare

//= reqiure angular 
//= require jquery 

farà qualcosa di diverso, rispetto

//= require jquery 
//= require angular 

ci sono molti altri casi quando l'ordine del carico può importa, per esempio se si dispone Backbone.js e sottolineatura, si vorrà caricare Underscore prima Backbone, ecc.

Come pratica generale, mi raccomando sempre di usare solo require, a meno che tu non stia caricando il tuo proprio codice in cui l'ordine non è rilevante, ad esempio //= require_tree ./controllers per la propria directory di controller. In tal caso, direi che require_tree è perfettamente ok.

+0

È strano perché non c'è niente in vendor/assets/javascript diversi da un file nascosto. È stato pensato per essere normale dopo averlo aggiunto al file Gem, installato bundle e riavviato foreman? – Hengjie

+0

@Hengjie non verrà copiato direttamente nell'applicazione rotaie. La gemma stessa ha una directory 'vendor/assets/javascripts' con il file. –

2

Nel caso in cui qualcuno avesse lo stesso problema e la soluzione offerta non funzionasse. Ho aggiunto //= require angular nel bene

group :assets do 
//= require angular 
end 

Tuttavia ancora mi è stato sempre lo stesso errore. Dopo un po 'di ricerca ho scoperto che per qualche motivo deve essere aggiunto al di fuori del gruppo di risorse. Tutto bene ora. Non sono sicuro se questo è il modo migliore anche se non sto ottenendo più questo errore.

4

nella vostra Gemfile se si utilizza in questo modo:

group :assets do 
    gem 'angularjs-rails' 
end 

quindi rimuovere che di gruppo: attività cosa, dovrebbe essere semplice senza blocco:

es:

gem 'angularjs-rails' 

E ' funzionerà sicuramente

+1

Ma perché non funziona nel gruppo di risorse? – kiddorails

+0

Nella versione rails 4, potrebbe esserci qualche conflitto con le risorse per questa gemma, è necessario controllare –

Problemi correlati