Visualizzazione dei risultati da 1 a 8 su 8

Discussione: pacchettizzare

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    24

    pacchettizzare

    Ciao a tutti, vorrei pacchettizzare il mio progetto, cioè, partendo dalla directory del progetto, vorrei dividere in cartelle i file.rb in modo da rendere il tutto più ordinato.
    Avendo già scritto diversi file ho dovuto modificare alcuni path nei require, precisamente quelli che ho inserito nelle cartelle.
    Quindi ho qualcosa del tipo: cartellaProgetto e varie sotto cartelle (es. a,b,c), quindi se prima il file b usava a facendo require'a' ora deve fare require'pathFinoAllaDirDelProg/dirDiA/a', se b ed a sono in due directory separate naturalmente.
    Qualcuno sa se al posto di 'pathFinoAllaDirDelProg' posso mettere un qualcosa (diciamo P)che rappresenti il path fino alla directory del progetto in modo da poter scrivere require'P/dirDiA/a'.
    Insomma vorrei che se cambio la directory del progetto non devo andare a modificare ogni volta il path nelle require...
    Ho provato a fare da b require'dirDiA/a' e non funge.
    Mi sa che non son stato chiarissimo, scusate. Spero qualcuno mi decifri.
    Grazie

  2. #2
    Ho capito molto poco.
    Ci sono diverse soluzioni al tuo "problema" ma molte dipendono da cosa stai facendo.

    E' un progetto Rails? Ruby? Una GEM?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    24
    E' un progetto ruby.

    Allora diciamo che A è la cartella del progetto e diciamo che in A ci sono B e C che contengono rispettivamente i file b.rb e c.rb.
    c.rb deve usare b.rb, quindi deve fare require 'b'. Così però non funziona e tu sai perchè.
    Supponiamo che per arrivare ad A nel mio file system si debba seguire il path /home/lallacat/workspace/A
    Se faccio require'/home/lallacat/workspace/A/B/b' funziona.
    Vorrei sapere se posso sostituire /home/lallacat/workspace/A con qualche variabile globale o altro in modo da non dover modificare ogni volta il path nelle require nel caso cambiasse il path per arrivare ad A.

    Spero di essere stato un po più chiaro. :master:

  4. #4
    Un progetto Ruby normalmente ha una sua struttura.
    Se parliamo di GEM, è convenzione una cartella di progetto con all'interno almeno due cartelle:
    - lib contenente le librerie
    - test contenente gli unit test per le librerie

    Allo stesso modo, un progetto Rails ha una sua struttura e così via.

    L'uso di strutture convenzionate aiuta a semplificare le cose.
    Ad esempio, per una GEM la cartella /lib è aggiunta automaticamente al $LOAD_PATH limitando problemi derivanti dalle inclusioni di file dipendenti poiché puoi sempre fare riferimento al percorso a partire da lib.

    Nel tuo caso, dove non c'è una vera e propria struttura, ti consiglio in qualche modo di creartela.
    Identifica inanzi tutto la cartella principale del progetto, ad esempio /home/lallacat/workspace/A.
    Assicurati di includere il percorso corrente nel load path

    codice:
    $:.unshift(File.dirname(__FILE__))
    Ora, ogni libreria inclusa potrà a sua volta usare un percorso relativo rispetto al $LOAD_PATH.

    codice:
    # /home/lallacat/workspace/A/file.rb include /home/lallacat/workspace/A/B/ruby.rb
    require 'B/ruby'
    
    # /home/lallacat/workspace/C/otherfile.rb include /home/lallacat/workspace/A/B/ruby.rb
    require 'B/ruby'
    Vorrei sapere se posso sostituire /home/lallacat/workspace/A con qualche variabile globale
    Elimina dal RubyVocabolario la parola variabile globale.

    Assicurati inoltre di seguire le convenzioni di sintassi. Ad esempio, è norma creare le sottocartelle per i namespace di oggetto. In questo modo l'interprete potrà caricare in automatico i file quando non inclusi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    24
    Salve Weppos e grazie per i consigli.
    Volevo chiederti: l'istruzione $:.unshift(File.dirname(__FILE__)), va messa in ogni file del progetto?

    E poi potresti consigliarmi qualche manuale (in italiano s'è possibile) in cui si parli delle convenzioni da rispettare di cui parlavi.

    Grazie ancora

    Pierluigi

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    24
    Scusa mi son dimenticato di farti un'altra domanda:
    Io come IDE uso Eclipse, e quando creo un progetto Ruby nella cartella del progetto non vengono create in automatico le cartelle lib e test. Questo tipo di organizzazione vale solo per le GEM o è consigliabile anche per i progetti in generale?

  7. #7
    Originariamente inviato da lallacat
    Questo tipo di organizzazione vale solo per le GEM o è consigliabile anche per i progetti in generale?
    Dipende dai progetti.
    Un progetto Rails ha la sua struttura, un progetto RubyCocoa ha la sua.

    Quella vale di norma per le GEM e può adattarsi anche progetti Ruby generici.
    Infatti, ogni progetto Ruby dovrebbe avere una struttura di file e relativi unit test (assicurati di non saltare quest'ultimo passo nella tua fase di formazione).

    Riguardo ai manuali, in Italiano non ho idea.
    Personalmente leggo solo documentazione inglese e buona parte di quanto ho imparato l'ho appreso studiando i sorgenti di librerie già esistenti per imparare convenzioni ed abitudini di programmazione.
    GitHub e RubyForge sono un ottimo punto di partenza.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    24
    Grazie ancora.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.