2012-02-23 15 views
40

En mi proyecto de Ruby estoy usando un desorden de cosas como mover y editar archivos en varios cuadros remotos y realmente necesito algo así como una ruta relativa a mi directorio de proyecto raíz. Tengo muchas carpetas de procesamiento que se utilizan en muchos métodos.Ruta relativa al directorio de su proyecto

En este momento tengo rutas de acceso codificadas, pero eso me hace infeliz.

Respuesta

73

Puede obtener el directorio actual (directorio del archivo actual) con este

File.dirname(__FILE__) 

A continuación, puede unirse a ella con la ruta relativa a la raíz

File.join(File.dirname(__FILE__), '../../') # add proper number of .. 

O puede utilizar expand_path para convertir relativa camino al absoluto

ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', File.dirname(__FILE__)) 

O puede calcular ruta relativa entre dos directorios.

require 'pathname'; 
puts Pathname.new('/').relative_path_from(Pathname.new('/some/child/dir/')).to_s 
# => ../../.. 
+0

Gracias Serg, déjame refrase – qwebek

+0

Así que, ¿qué es exactamente el problema? –

+1

El problema determinado i enfrentado está siguiendo - FileUtils.chdir ("\\\\ someRemoteIp \\ somedir") FileUtils.cp (nombre de archivo, "local_box_drive \\ carpeta") entonces i necesidad de extraer algunos datos de el archivo que está en la raíz del proyecto tengo que hacer FileUtils.chdir ("E: \\ carpeta \\ carpeta \\ my_project_folder") mi_metodo (local_file_in_root_project_folder) Si voy a ejecutar dicho código en alguna otra caja, fallará, necesito FileUtils.chdir ("E: \\ carpeta \\ carpeta \\ my_project_folder") sustituido por alguna expresión relativa que me lleve a la carpeta raíz de mi proyecto – qwebek

12
__dir__ 

Desde Ruby 2, sólo tiene que utilizar la función de núcleo :__dir__ para obtener el directorio de la ruta absoluta del archivo actual. Entonces, para dar un ejemplo, puede establecer un ROOT_DIR constante al comienzo de su proyecto en (config.rb, environments.rb, constants.rb, o como quiera que lo llame).

Ver Ruby Documentation

Cuestiones relacionadas