# Pipeline dubbi su installazione librerie

**URL:** <https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467>\
**Category:** IT\
**Created:** [September 5, 2013, 10:32am UTC](https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467 "2013-09-05T10:32:25Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![addis\_a](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@addis\_a](https://www.ruby-forum.com/u/addis_a)\
**Post date:** [September 5, 2013, 10:32am UTC](https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467/1 "2013-09-05T10:32:25Z")

</div>

ciao a tutti,  
ho realizzato un template in html usando un po di librerie esterne:  
twitterbootstrap, jquery, bootstrap-responsive, alcuni plugins jquery.

Sto cercando di costruire il template in rails ma non sto capendo in  
dettaglio come ragiona rails.  
Nel mio gem file ho:  
gem ‘bootstrap-sass’  
gem ‘jquery-rails’

avendo queste gemme occorre che nella cartella /app/assets inserisca le  
librerie (css+js) di twitterbootstrap e jquery oppure ci pensa rails da  
solo? (visto che ho installato le gemme).

Inoltre come faccio per usare i plugins jquery? devo installare anche  
quelli come fossero gemme (dove le trovo!?) oppure basta che inserisca  
il plugin della libreria all’interno degli assets?

In pratica il mio dubbio è se in app/assets devo inserire tutto (quindi  
anche le librerie) oppure solo le mie customizzazioni.  
Altra questione: rails unisce in un unico files tutti i css presenti  
nella cartella assets però io credo che possa sorgere il problema che  
non tutti i css sono da applicare all’intero sito, ne esistono alcuni  
solo per certe pagine e altri solo per altre pagine. Qualcuno si è mai  
scontrato con questo problema?

Grazie

---

<div class="post-metadata">

**Author:** ![alfxx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@alfxx](https://www.ruby-forum.com/u/alfxx)\
**Post date:** [September 5, 2013, 3:07pm UTC](https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467/2 "2013-09-05T15:07:34Z")

</div>

Ciao Cris,

semplificando un po’, app/assets/javascripts è analoga alla vecchia  
public/javascripts tranne per avere il file application.js che fa da  
indice di quello che vuoi che venga caricato dall’HTML.

Quindi i plugin di jquery vanno messi lì dentro.  
I javascript che sono installati come gemme normalmente sono nelle  
directory delle gemme, che modificano i path di inclusione dei  
javascript per prenderli da quelle directory.

Lo stesso vale per i css.

> Altra questione: rails unisce in un unico files tutti i css presenti  
> nella cartella assets però io credo che possa sorgere il problema che  
> non tutti i css sono da applicare all’intero sito, ne esistono alcuni  
> solo per certe pagine e altri solo per altre pagine. Qualcuno si è mai  
> scontrato con questo problema?

Questo succede anche per i javascript. Ci sono vari approcci, uno dei  
quali è mettere in application.js/css solo quelli che vanno in tutte le  
pagine e includere da .erb/.haml i file che servono nelle singole pagine  
usando content\_for :head

Vedi anche

- [http://éncoder.dk/blog/2012/02/page-specific-javascript-in-rails-3/](http://xn--ncoder-9ua.dk/blog/2012/02/page-specific-javascript-in-rails-3/)
- 

> <https://stackoverflow.com/questions/8976430/how-to-do-per-page-javascript-with-the-rails-asset-pipeline>

Un caso tipico sono js e css per gli admin, che per ragioni di  
sicurezza/riservatezza non dovrebbero entrare nelle pagine di tutti gli  
utenti, ma a cui servono tutti gli altri file.

Ciao  
Paolo

---

<div class="post-metadata">

**Author:** ![alfxx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@alfxx](https://www.ruby-forum.com/u/alfxx)\
**Post date:** [September 6, 2013, 10:04am UTC](https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467/3 "2013-09-06T10:04:35Z")

</div>

> Ci sono vari approcci, uno dei  
> quali è mettere in application.js/css solo quelli che vanno in tutte le  
> pagine  
> ok

> e includere da .erb/.haml i file che servono nelle singole pagine  
> usando content\_for :head  
> questo passaggio non mi è del tutto chiaro

Inoltre un altra cosa non mi è chiara: ho installato la gemma  
bootstrap-sass ma ora in quale path vedo la libreria? mi aspetterei di  
vederla dentro a vendor ma non c’è.

> Ciao  
> Paolo  
> Ciao grazie

---

<div class="post-metadata">

**Author:** ![alfxx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@alfxx](https://www.ruby-forum.com/u/alfxx)\
**Post date:** [September 6, 2013, 11:29am UTC](https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467/4 "2013-09-06T11:29:46Z")

</div>

grazie a tutti per le risposte.  
Ho raggiungo questa semi-conclusione e vorrei conoscere la vostra  
opinione:  
ho creato una cartella stylesheets/all dentro alla quale ci sono i css  
che uso in tutta l’applicazione.  
Nel file application.css.scss ho lasciato solo le seguenti direttive: \*=  
require\_self, \*= require\_tree ./all  
In questo modo carico tutti i css “globali”.

Per caricare i css specifici ho operato cosi:  
Ho creato una cartella /stylesheets/standalone e dentro ho messo tutti i  
css che vengono richiamati in singole pagine  
all’interno del file .erb:  
\<% content\_for :specific\_stylesheet do %\>  
\<%= stylesheet\_link\_tag ‘standalone/standalone\_stylesheet.css’ %\>  
\<% end %\>

nel layout (tipicamente dentro all’header):  
\<%= yield :specific\_stylesheets %\>

in questo modo pare funzionare correttamente.  
Penso potrei usare la stessa tecnica per i js  
Che ne pensate?

---

<div class="post-metadata">

**Author:** ![alfxx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@alfxx](https://www.ruby-forum.com/u/alfxx)\
**Post date:** [September 6, 2013, 10:27am UTC](https://www.ruby-forum.com/t/pipeline-dubbi-su-installazione-librerie/236467/5 "2013-09-06T10:27:26Z")

</div>

Il 05/09/13 10:32, asd asd ha scritto:

> avendo queste gemme occorre che nella cartella /app/assets inserisca le  
> librerie (css+js) di twitterbootstrap e jquery oppure ci pensa rails da  
> solo? (visto che ho installato le gemme).

In genere ogni libreria ha la sua documentazione in cui spiega come  
funziona. Di solito gemme che vanno a toccare gli assets hanno un rake  
da lanciare dopo il `bundle install` che crea i dovuti file e modifica  
application.css e application.js per inserirli nella pipeline degli  
asset. Ad esempio la gemma twitter-bootstrap-rails inserisce

//= require twitter/bootstrap

in application.js e crea un file .css nella cartella assets/stylesheets  
che viene caricata da application.css se usi la direttiva

\*= require\_tree .

altrimenti devi farlo a mano con un require specifico

> Inoltre come faccio per usare i plugins jquery? devo installare anche  
> quelli come fossero gemme (dove le trovo!?) oppure basta che inserisca  
> il plugin della libreria all’interno degli assets?

sono due approcci diversi con lo stesso risultato. Se trovi una gemma  
ben segui le istruzioni di installazione e sei a posto. Altrimenti basta  
che scarichi il plugin che ti interessa, lo metti nella cartella  
assets/javascripts (io di solito creo una sottocartella lib/) e li  
includi dove necessario. Se ti servono da tutte le parti usi il require  
dentro applications.js

Se non ti chiaro come funziona la pipeline o non sai come funzionano  
gli include ti consiglio una lettura di questa pagina, molto chiara:

> **[The Asset Pipeline — Ruby on Rails Guides](https://guides.rubyonrails.org/asset_pipeline.html)**
>
> The Asset PipelineThis guide covers the asset pipeline.After reading this guide, you will know: What the asset pipeline is and what it does. How to properly organize your application assets. The benefits of the asset pipeline. How to add a...

> In pratica il mio dubbio se in app/assets devo inserire tutto (quindi  
> anche le librerie) oppure solo le mie customizzazioni.  
> Altra questione: rails unisce in un unico files tutti i css presenti  
> nella cartella assets per io credo che possa sorgere il problema che  
> non tutti i css sono da applicare all’intero sito, ne esistono alcuni  
> solo per certe pagine e altri solo per altre pagine. Qualcuno si mai  
> scontrato con questo problema?

continuamente 🙂  
Io uso application.css e application.js solo per quello che mi serve da  
tutte le parti, dato che questi due file vengono inclusi nel layout di  
base (app/views/layouts/application.html.erb):

\<%= stylesheet\_link\_tag “application”, media: “all”,  
“data-turbolinks-track” =\> true %\>

\<%= javascript\_include\_tag “application”, “data-turbolinks-track” =\>  
true %\>

Se hai una parte del sito, ad esempio il backend di amministrazione, che  
ha un layout diverso o usa css/js diversi da application.html.erb ti  
conviene creare un diverso layout includendo diversi file css/js al  
posto di application (ad esempio admin.css e admin.js).

Inoltre, se ho bisogno di css o js specifici per una pagina utilizzo la  
direttiva `content_for` direttamente nella vista. Come suggeriva paolo  
puoi usare `content_for :head` per inserire il file nel tag , ma  
dato che preferisco caricare i file js prima della chiusura del body mi  
creo due tag diversi, :stylesheets e :javascripts.  
Dato che questa cosa un po’ pi complicata, ecco il codice:

> <https://gist.github.com/tommyblue/6460998>

ATTENZIONE: se crei file js e css che non vengono inclusi da  
application.css e application.js devi inserirli in  
config/environments/production.rb nella direttiva  
`config.assets.precompile` altrimenti non verranno precompilati e  
l’applicazione in produzione esploder appena qualcuno prover ad  
utilizzarli 🙂

ATTENZIONE 2: se usi file css custom attento che in application.css non  
ci sia `*= require_tree .` altrimenti quei css te li troverai da tutte  
le parti e non solo dove li includi a mano
