Как получить путь к корневому каталогу моего приложения Rails?
Как получить путь к корневому каталогу моего приложения Rails?
Ответы:
В Rails 3 и новее:
Rails.root
который возвращает Pathname
объект. Если вы хотите строку, которую вы должны добавить .to_s
. Если вам нужен другой путь в вашем Rails-приложении, вы можете использовать его join
так:
Rails.root.join('app', 'assets', 'images', 'logo.png')
В Rails 2 вы можете использовать RAILS_ROOT
константу, которая является строкой.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Для супер правильности, вы должны использовать:
Rails.root.join('foo','bar')
что позволит вашему приложению работать на платформах, где /
нет разделителя каталогов, если кто-то попытается запустить его на одной из них.
Rails.root.join('foo','bar')
оценивается объект Pathname с @path '/ Users / purplejacket / my_rails_app / foo / bar'
Вы можете получить доступ к пути приложения, используя переменную RAILS_ROOT
.
Например:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
В дополнение ко всем другим правильным ответам, поскольку Rails.root
это Pathname
объект, он не будет работать:
Rails.root + '/app/assets/...'
Вы могли бы использовать что-то вроде join
Rails.root.join('app', 'assets')
Если вы хотите строку, используйте это:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
делает работу, но да join
это аккуратнее.
В некоторых случаях вы можете захотеть получить корень Rails без необходимости загрузки Rails.
Например, вы получаете более быстрый цикл обратной связи, когда модели TDD, которые не зависят от Rails, требуют spec_helper
вместо 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
Что позволяет легко загружать простые старые объекты Ruby из их файлов спецификаций.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Ты можешь использовать:
Rails.root
Но для объединения активов вы можете использовать:
Rails.root.join(*%w( app assets))
Надеюсь, это поможет вам.