Forum: Italian Ruby user group pipeline dubbi su installazione librerie

71845161952bbfcb58f4e474164453ef?d=identicon&s=25 asd asd (cris_1986)
on 2013-09-05 10:32
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
7de465f222e6a9c7fe658e370d0bfe05?d=identicon&s=25 Paolo Montrasio (pmontrasio)
on 2013-09-05 15:07
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-javas...
*
http://stackoverflow.com/questions/8976430/how-to-...

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
71845161952bbfcb58f4e474164453ef?d=identicon&s=25 asd asd (cris_1986)
on 2013-09-06 10:04
>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
6dbddfda34303f8d83620f7293612671?d=identicon&s=25 Tommaso Visconti (Guest)
on 2013-09-06 10:27
(Received via mailing list)
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:
http://guides.rubyonrails.org/asset_pipeline.html

> 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 <head>, 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
71845161952bbfcb58f4e474164453ef?d=identicon&s=25 asd asd (cris_1986)
on 2013-09-06 11:29
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?
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.