Domanda

Sto cercando di capire cosa funziona e non funziona nelle gemme di Ruby (principalmente dalla prospettiva di crearne una per me stesso per riutilizzare la funzionalità da un progetto all'altro).

Quando crei una gemma di Ruby, sei limitato ad includere solo la funzionalità di Ruby o potresti creare una gemma che consisteva in modelli Rails, file CSS e JavaScript?

In tal caso, come potrebbe l'utente della gemma accedere a tali risorse in un progetto Rails (oltre ad aggiungere un'istruzione 'config gem' al file environment.rb?

È stato utile?

Soluzione

No, non lo è. Le gemme sono librerie di codici, non file statici.

Quando carichi una gemma, non sposti i file nella tua directory pubblica. Carichi un file ruby ??e accedi a un modulo. Quindi, puoi solo eseguire il codice ruby ??al suo interno.
Tuttavia, il tuo codice ruby ??può darti alcuni aiutanti che ti consentono di creare facilmente il tuo design, ad esempio.

Se vuoi includere alcune risorse di file statici in ciascuno dei tuoi progetti ruby, vedrei due soluzioni:

  • Crea un progetto modello, includendo tutti i CSS, JavaScript ecc. che usi ogni volta. Puoi prendere bretelle come esempio di ciò.

  • Crea un nuovo repository con tutti questi file statici e aggiungilo come sottomodulo (con git o svn ) e includilo in ciascuno dei tuoi progetti.

La prima soluzione sarebbe la mia preferita, ma potresti voler prendere l'altra.

Altri suggerimenti

Come osserva dmathieu, le gemme sono per le librerie ruby ??installate nel percorso di caricamento del sistema, non per le cose che vanno nella directory del progetto. Se vuoi impacchettare il tuo scheletro del progetto delle rotaie come una gemma, sarebbe abbastanza semplice avere un piccolo eseguibile rubino che serviva da generatore per copiare l'albero del progetto scheletro in una directory di destinazione. Potresti quindi impacchettare il tutto in una gemma, i tuoi file scheletro potrebbero trovarsi nella directory gem e potresti dire generate_new_project someproject per copiarli nella nuova directory del progetto.

Puoi puoi aggiungere facilmente parziali e altre viste HAML, Builder o ERB. La seguente struttura dovrebbe funzionare:

# in my_gem/rails/init.rb
ActionController::Base.append_view_path(File.expand_path(File.join(File.dirname(__FILE__), '..', 'views')))

# in my_gem/views/my_gem/_some_partial.html.erb
This is a partial from MyGem!

# in your_rails_app/views/some_controller/some_view.html.erb:
<%= render :partial => '/my_gem/some_partial' -%>

Questo non risponde direttamente alla tua domanda sui file statici. Spesso la scommessa migliore è un generatore che copia i file CSS, JS e altri nella tua directory pubblica. In alternativa, è possibile utilizzare un StaticFilesController e inserire i file statici nella directory delle viste.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top