Pipeline dubbi su installazione librerie

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

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

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

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

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?

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:

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 :slight_smile:
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:

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 :slight_smile:

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