Rails Ruta del directorio raíz?
¿Cómo obtengo la ruta del directorio raíz de mi aplicación Rails?
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.
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.
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"
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
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 ...
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.
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
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
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