Comment obtenir le chemin du répertoire racine de mon application Rails?
Dans Rails 3 et plus récent:
Rails.root
qui retourne un objet Pathname
. Si vous voulez une chaîne, vous devez ajouter .to_s
. Si vous voulez un autre chemin dans votre application Rails, vous pouvez utiliser join
comme ceci:
Rails.root.join('app', 'assets', 'images', 'logo.png')
Dans Rails 2, vous pouvez utiliser la constante Rails_ROOT
, qui est une chaîne.
Pour une exactitude parfaite, vous devriez utiliser:
Rails.root.join('foo','bar')
ce qui permettra à votre application de fonctionner sur des plates-formes où /
n'est pas le séparateur de répertoires, si quelqu'un essaye de l'exécuter sur un seul.
Vous pouvez accéder au chemin de l'application Rails à l'aide de la variable Rails_ROOT
.
Par exemple:
render :file => "#{Rails_ROOT}/public/layouts/mylayout.html.erb"
En plus de toutes les autres réponses correctes, puisque Rails.root
est un objet Pathname
, cela ne fonctionnera pas:
Rails.root + '/app/assets/...'
Vous pouvez utiliser quelque chose comme join
Rails.root.join('app', 'assets')
Si vous voulez une chaîne, utilisez ceci:
Rails.root.join('app', 'assets').to_s
Dans certains cas, vous souhaiterez peut-être utiliser la racine Rails sans devoir charger de Rails.
Par exemple, vous obtenez un cycle de retour plus rapide lorsque vous modifiez des modèles qui ne dépendent pas de Rails en exigeant spec_helper
au lieu 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
Ce qui vous permet de charger facilement Plain Old Ruby Objects à partir de leurs fichiers de spécifications.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Vous pouvez utiliser:
Rails.root
Mais pour rejoindre les actifs, vous pouvez utiliser:
Rails.root.join(*%w( app assets))
Espérons que cela vous aide.