¿Cómo obtengo la ruta del directorio raíz de mi aplicación Rails?
¿Cómo obtengo la ruta del directorio raíz de mi aplicación Rails?
Respuestas:
En Rails 3 y más reciente:
Rails.root
que devuelve un Pathname
objeto Si desea una cadena, debe agregarla .to_s
. Si desea otra ruta en su aplicación Rails, puede usarla join
así:
Rails.root.join('app', 'assets', 'images', 'logo.png')
En Rails 2 puedes usar la RAILS_ROOT
constante, que es una cadena.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Para una súper corrección, debe usar:
Rails.root.join('foo','bar')
lo que permitirá que su aplicación funcione en plataformas donde /
no está el separador de directorios, en caso de que alguien intente ejecutarlo en uno.
Rails.root.join('foo','bar')
evalúa como objeto Pathname cuyo @path es '/ Users / purplejacket / my_rails_app / foo / bar'
Puede acceder a la ruta de la aplicación rails usando variables RAILS_ROOT
.
Por ejemplo:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Además de todas las otras respuestas correctas, dado que Rails.root
es un Pathname
objeto, esto no funcionará:
Rails.root + '/app/assets/...'
Podrías usar algo como join
Rails.root.join('app', 'assets')
Si quieres una cadena usa esto:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
hace el trabajo, pero sí join
es más ordenado.
En algunos casos, es posible que desee la raíz de Rails sin tener que cargar Rails.
Por ejemplo, obtiene un ciclo de retroalimentación más rápido cuando TDD requiere modelos que no dependen de Rails al requerir en spec_helper
lugar de rails_helper
.
# spec/spec_helper.rb
require 'pathname'
rails_root = Pathname.new('..').expand_path(File.dirname(__FILE__))
[
rails_root.join('app', 'models'),
# Add your decorators, services, etc.
].each do |path|
$LOAD_PATH.unshift path.to_s
end
Lo que le permite cargar fácilmente Objetos Ruby Plain Old de sus archivos de especificaciones.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Puedes usar:
Rails.root
Pero para unirte a los activos puedes usar:
Rails.root.join(*%w( app assets))
Espero que esto te ayude.