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 Pathnameobjeto. Se você quer uma string, você deve adicionar .to_s. Se você deseja outro caminho no seu aplicativo Rails, pode usar o joinseguinte:
Rails.root.join('app', 'assets', 'images', 'logo.png')
No Rails 2, você pode usar a RAILS_ROOTconstante, 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 Pathnameobjeto, 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_helpervez 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ê.