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 Pathnameobjet. Si vous voulez une chaîne, vous devez ajouter .to_s. Si vous voulez un autre chemin dans votre application Rails, vous pouvez utiliser joincomme ceci:
Rails.root.join('app', 'assets', 'images', 'logo.png')
Dans Rails 2, vous pouvez utiliser la RAILS_ROOTconstante, 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.roots'agit d'un Pathnameobjet, 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, joinc'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_helperau 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.