Como obtenho o caminho do diretório raiz do meu aplicativo Rails?
Como obtenho o caminho do diretório raiz do meu aplicativo Rails?
Respostas:
No Rails 3 e mais recente:
Rails.root
que retorna um Pathname
objeto. Se você quer uma string, você deve adicionar .to_s
. Se você deseja outro caminho no seu aplicativo Rails, pode usar o join
seguinte:
Rails.root.join('app', 'assets', 'images', 'logo.png')
No Rails 2, você pode usar a RAILS_ROOT
constante, que é uma string.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Para super correção, você deve usar:
Rails.root.join('foo','bar')
que permitirá que seu aplicativo funcione em plataformas onde /
não existe o separador de diretório, se alguém tentar executá-lo em um.
Rails.root.join('foo','bar')
avaliado o objeto Nome do caminho cujo @caminho é '/ Users / purplejacket / my_rails_app / foo / bar'
Você pode acessar rails caminho aplicativo usando variável RAILS_ROOT
.
Por exemplo:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Além de todas as outras respostas corretas, como Rails.root
é um Pathname
objeto, isso não funcionará:
Rails.root + '/app/assets/...'
Você poderia usar algo como join
Rails.root.join('app', 'assets')
Se você deseja uma string, use isto:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
faz o trabalho, mas sim join
é mais puro.
Em alguns casos, você pode querer a raiz do Rails sem precisar carregar o Rails.
Por exemplo, você obtém um ciclo de feedback mais rápido ao TDD'ing de modelos que não dependem do Rails exigindo em spec_helper
vez 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
O que permite carregar facilmente objetos antigos simples do Ruby a partir de seus arquivos de especificação.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Você pode usar:
Rails.root
Mas, para ingressar nos ativos, você pode usar:
Rails.root.join(*%w( app assets))
Espero que isso ajude você.