Ścieżka głównego katalogu Rails?

Jak uzyskać ścieżkę katalogu głównego mojej aplikacji Rails?

Author: fivetwentysix, 2010-09-16

8 answers

W Rails 3 i nowszych:

Rails.root

Który zwraca Pathname obiekt. Jeśli chcesz mieć ciąg znaków, musisz dodać .to_s. Jeśli chcesz mieć inną ścieżkę w aplikacji Rails, możesz użyć join Tak:

Rails.root.join('app', 'assets', 'images', 'logo.png')

W Rails 2 możesz użyć RAILS_ROOT stałej, która jest ciągiem znaków.

 493
Author: Mischa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-10 14:12:40

Dla super poprawności należy użyć:

Rails.root.join('foo','bar')

, który pozwoli Twojej aplikacji pracować na platformach, na których / nie jest separatorem katalogów, jeśli ktoś spróbuje go uruchomić na jednym z nich.

 99
Author: malclocke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-16 08:16:47

Możesz uzyskać dostęp do ścieżki aplikacji rails używając zmiennej RAILS_ROOT.

Na przykład:

render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
 21
Author: Anubhaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-23 13:58:43

Oprócz wszystkich innych poprawnych odpowiedzi, ponieważ Rails.root jest Pathname obiekt, to nie zadziała:

Rails.root + '/app/assets/...'

Przydałoby się coś w rodzaju join

Rails.root.join('app', 'assets')

Jeśli chcesz mieć ciąg znaków użyj tego:

Rails.root.join('app', 'assets').to_s
 13
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-07 19:33:32

W niektórych przypadkach możesz chcieć root Rails bez konieczności ładowania Rails.

Na przykład, można uzyskać szybszy cykl sprzężenia zwrotnego, gdy modele TDD ' ING, które nie zależą od szyn, wymagają spec_helper zamiast 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

Który pozwala na łatwe ładowanie zwykłych starych obiektów Ruby z ich plików spec.

# spec/models/poro_spec.rb

require 'spec_helper'

require 'poro'

RSpec.describe ...
 3
Author: Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-09 14:10:26

Możesz użyć:

Rails.root

Ale aby dołączyć do zasobów można użyć:

Rails.root.join(*%w( app assets))
Mam nadzieję, że to ci pomoże.
 0
Author: Ali Hassan Mirza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 05:53:04

Po prostu przez Rails.root lub jeśli chcesz dodać coś możemy użyć go jak Rails.root.join ('app', 'assets'). to_s

 -1
Author: Amit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-26 10:48:25

Po prostu pisząc Rails.root i dodawać wszystko przez Rails.root.join (*%w (App assets)). to_s

 -1
Author: sumit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-18 06:56:16