“richiedono File.dirname(__FILE__)” — per l’utilizzo sicuro annulla filesystem di dipendenza?

Di Rubino e librararies sto usando utilizzare require affermazioni come questa:

require File.dirname(__FILE__) + '/specification_helper.rb'

lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "lib"))

require File.join(File.dirname(__FILE__), 'lib/tools', 'version')

require File.expand_path(File.join(File.dirname(__FILE__), 'datautils', 'conn'))

Non è questo il formato che rendono il vostro codice inutilmente dipende dalla struttura del file system?

Perché l’autore non farlo in questo modo?

Sarebbe possibile (in modo sicuro) modificare questo codice per rimuovere questa dipendenza sul filesystem?

 

One Reply
  1. 10

    Io in realtà utilizzare questo schema di codice di produzione.

    Richiedere i file relativo all’attuale posizione di origine ha diversi vantaggi :

    • l’albero dei sorgenti possono essere spostati nel suo complesso e rimane utilizzabile dal momento che abbiamo bisogno di fonti relativamente l’uno all’altro.
    • dal momento che si utilizza percorsi, evitare urti accidentali (caricamento di un origine con lo stesso nome in un’altra libreria, o ricaricare la stessa origine due volte)
    • il codice può essere utilizzato senza dover modificare il rubino di ricerca percorso di

    Si dovrebbe preferire l’uso di una versione modificata di ruby percorso di ricerca, è possibile farlo in diversi modi :

    1. aggiungendo -I opzioni di ruby riga di comando
    2. modificare il $LOAD_PATH variabile all’interno di fonti
    3. giocare con la variabile di ambiente RUBYLIB

    Soluzione 1 implica il controllo come ruby viene richiamato. Avrete bisogno di uno script per avviare il programma, ad esempio:

    @echo off
    REM my_script.cmd
    set srcdir=%~dp0\..\path\to\source
    ruby -I %srcdir% %srcdir%\my_script.rb

    O:

    #!/bin/sh
    srcdir=$(cd $(dirname $0)/../path/to/source && pwd)
    exec ruby -I $srcdir $srcdir/my_script.rb

    Soluzione 2 è praticabile, ma non evitare collisioni. Sarete in genere fare qualcosa di simile :

    $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))

    Soluzione 3 è da sconsigliare, meno dipendenze dovrete verso le variabili di ambiente, meglio si sarà.

Lascia un commento