Comment obtenir le chemin du répertoire racine de mon application Rails?
Comment obtenir le chemin du répertoire racine de mon application Rails?
Réponses:
Dans Rails 3 et plus récent:
Rails.root
qui renvoie un Pathname
objet. 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 RAILS_ROOT
constante, qui est une chaîne.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Pour une super justesse, vous devez utiliser:
Rails.root.join('foo','bar')
qui permettra à votre application de fonctionner sur des plates-formes où /
n'est pas le séparateur de répertoire, si quelqu'un essaie de l'exécuter sur une seule.
Rails.root.join('foo','bar')
évalue l'objet Pathname dont le @path est '/ Users / purplejacket / my_rails_app / foo / bar'
Vous pouvez accéder au chemin de l'application rails à l'aide d'une variable RAILS_ROOT
.
Par exemple:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
En plus de toutes les autres bonnes réponses, puisqu'il Rails.root
s'agit d'un Pathname
objet, cela ne fonctionnera pas:
Rails.root + '/app/assets/...'
Vous pourriez 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
Rails.root + 'app/assets'
ça marche, mais oui, join
c'est plus propre.
Dans certains cas, vous souhaiterez peut-être la racine Rails sans avoir à charger Rails.
Par exemple, vous obtenez un cycle de rétroaction plus rapide lorsque les modèles TDD qui ne dépendent pas de Rails nécessitent 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 des objets Ruby Old Plain à 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))
J'espère que cela vous aidera.