Wie erhalte ich den Stammverzeichnispfad meiner Rails-App?
Wie erhalte ich den Stammverzeichnispfad meiner Rails-App?
Antworten:
In Rails 3 und neuer:
Rails.root
welches ein Pathname
Objekt zurückgibt . Wenn Sie eine Zeichenfolge möchten, müssen Sie diese hinzufügen .to_s
. Wenn Sie einen anderen Pfad in Ihrer Rails-App möchten, können Sie Folgendes verwenden join
:
Rails.root.join('app', 'assets', 'images', 'logo.png')
In Rails 2 können Sie die RAILS_ROOT
Konstante verwenden, bei der es sich um eine Zeichenfolge handelt.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Für eine hervorragende Korrektheit sollten Sie Folgendes verwenden:
Rails.root.join('foo','bar')
Dadurch kann Ihre App auf Plattformen ausgeführt werden, auf denen /
sich kein Verzeichnistrennzeichen befindet, falls jemand versucht, sie auf einer auszuführen.
Rails.root.join('foo','bar')
Pathname-Objekt ausgewertet, dessen @ path '/ Users / lilajacket / my_rails_app / foo / bar'
Sie können mit Variablen auf den Rails-App-Pfad zugreifen RAILS_ROOT
.
Zum Beispiel:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Zusätzlich zu all den anderen richtigen Antworten funktioniert dies nicht , da Rails.root
es sich um ein Pathname
Objekt handelt:
Rails.root + '/app/assets/...'
Sie könnten so etwas wie gebrauchen join
Rails.root.join('app', 'assets')
Wenn Sie eine Zeichenfolge möchten, verwenden Sie diese:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
funktioniert , aber ja join
ist ordentlicher.
In einigen Fällen möchten Sie möglicherweise das Rails-Stammverzeichnis, ohne Rails laden zu müssen.
Zum Beispiel erhalten Sie einen schnelleren Feedback-Zyklus, wenn Sie TDD-Modelle, die nicht von Rails abhängen, spec_helper
anstelle von benötigen 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
Auf diese Weise können Sie ganz einfach alte Ruby-Objekte aus ihren Spezifikationsdateien laden.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Sie können verwenden:
Rails.root
Um sich den Assets anzuschließen, können Sie Folgendes verwenden:
Rails.root.join(*%w( app assets))
Hoffentlich hilft dir das.