Rails Ruta del directorio raíz?


¿Cómo obtengo la ruta del directorio raíz de mi aplicación Rails?

Author: fivetwentysix, 2010-09-16

8 answers

En Rails 3 y posteriores:

Rails.root

Que devuelve un Pathname objeto. Si quieres una cadena tienes que añadir .to_s. Si quieres otra ruta en tu aplicación Rails, puedes usar join así:

Rails.root.join('app', 'assets', 'images', 'logo.png')

En Rails 2 puede usar la constante RAILS_ROOT, que es una cadena.

 493
Author: Mischa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-10 14:12:40

Para la corrección estupenda, usted debe utilizar:

Rails.root.join('foo','bar')

Que permitirá que su aplicación funcione en plataformas donde / no es el separador de directorios, en caso de que alguien intente ejecutarlo en uno.

 99
Author: malclocke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-16 08:16:47

Puede acceder a la ruta de la aplicación rails utilizando la variable RAILS_ROOT.

Por ejemplo:

render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
 21
Author: Anubhaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 13:58:43

Además De todas las otras respuestas correctas, ya que Rails.root es un Pathname objeto, esto no funciona:

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
 13
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-07 19:33:32

En algunos casos es posible que desee la raíz de Rails sin tener que cargar Rails.

Por ejemplo, se obtiene un ciclo de retroalimentación más rápido cuando TDD'ing modelos que no dependen de Rails al requerir spec_helper en 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

Que le permite cargar fácilmente Objetos Antiguos de Ruby desde sus archivos de especificaciones.

# spec/models/poro_spec.rb

require 'spec_helper'

require 'poro'

RSpec.describe ...
 3
Author: Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-09 14:10:26

Puedes usar:

Rails.root

Pero para unir los activos puede usar:

Rails.root.join(*%w( app assets))

Espero que esto te ayude.

 0
Author: Ali Hassan Mirza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-18 05:53:04

Simplemente por Rails.root o si quieres añadir algo podemos usarlo como Rails.arraigar.join ('app','assets'). to_s

 -1
Author: Amit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-26 10:48:25

Simplemente escribiendo Rails.raíz y añadir cualquier cosa por Rails.arraigar.join (*%w (app assets)). to_s

 -1
Author: sumit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-18 06:56:16