programing

Rails의로드 경로에 디렉토리를 추가 하시겠습니까?

nasanasas 2020. 11. 22. 19:50
반응형

Rails의로드 경로에 디렉토리를 추가 하시겠습니까?


Rails 2.3에서, Rails의 자동 재 로딩 메커니즘에 연결되도록로드 경로에 디렉토리를 추가하는 올바른 방법은 무엇입니까?

제가 생각하는 구체적인 예는 STI를 사용하는 여러 하위 클래스가있는 클래스가 있으며 최상위 레벨을 어지럽히 기보다는 하위 디렉토리에 배치하는 것이 좋습니다. 그래서 나는 다음과 같은 것을 가질 것입니다.

#app/models/widget.rb
class Widget < ActiveRecord::Base
   add_to_load_path File.join(File.dirname(__FILE__), "widgets")
end

#app/models/widgets/bar_widget.rb
class BarWidget < Widget
end

#app/models/widgets/foo_widget.rb
class FooWidget < Widget
end

add_to_load_path제가 찾고 있는 방법입니다.


현재 버전의 Rails (3.2.8)에서는 application.rb 파일에서 변경되었습니다.

코드는 현재 다음과 같이 주석 처리되어 있습니다.

  # Custom directories with classes and modules you want to be autoloadable.
  # config.autoload_paths += %W(#{config.root}/extras)

autoload_paths을 업데이트해야 합니다. 이전 load_paths 변수 를 수정하려고 하면이 오류가 발생합니다.

/configuration.rb:85:in `method_missing': undefined method `load_paths' for #<Rails::Application::Configuration:0xac670b4> (NoMethodError)

예를 들어 autoload_paths 구성에 추가 할 각 경로에 대해 다음과 유사한 행을 추가하십시오.

config.autoload_paths += %W(#{config.root}/app/validators)

config.autoload_pathsRails가 상수를 자동로드 할 경로의 배열을받습니다. 기본값은 아래의 모든 디렉토리 app입니다.

http://guides.rubyonrails.org/configuring.html


아래 댓글 작성자 (hakunin)에서 :

디렉토리가 아래 app/에 있으면 아무 곳에 나 추가 할 필요가 없으며 기본적으로 작동해야합니다 (확실히 3.2.12에서). Rails는 개발에서와 eager_load_paths같이 작동하고 autoload_paths프로덕션에서 열렬한 부하를 가지고 있습니다. 모든 app/*디렉토리가 자동으로 추가됩니다.


들어 이전 버전 레일 :

environment.rb 구성 파일에서이 작업을 수행 할 수 있습니다.

config.load_paths << "#{RAILS_ROOT}/app/widgets"

-

들어 레일 3 , 답변이 울부 짖는 소리를 참조


Rails 3에서는 config / application.rb에서 설정할 수 있습니다.이 샘플은 기본적으로 제공됩니다.

# Add additional load paths for your own custom dirs
# config.load_paths += %W( #{config.root}/extras )

Rails 5 에서는 더 이상 앱 디렉토리 내에서 폴더를 명시 적으로로드 할 필요가 없습니다. 내부에있는 모든 폴더를 직접 사용할 수 있습니다. 구성 파일을 건드릴 필요가 없습니다. 하지만 Spring에 문제가있는 것 같습니다.

따라서 새로운 워크 플로는 다음과 같습니다.

  1. / app 디렉토리에 새 폴더와 클래스를 만듭니다.
  2. 실행 spring stop명령 행에
  3. bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths'명령 줄 에서 자동로드 경로를 확인하십시오 . 이제 새 폴더가 나열됩니다.
  4. 실행 spring start명령 행에

Rails 5에서는 environment.rb에 다음 코드를 추가해야합니다.

# Add the widgets folder to the autoload path
Rails.application.configure do
  config.autoload_paths << "#{Rails.root}/app/widgets"
end

Rails 3에 대한 또 다른 업데이트-activesupport 3.0.0 :

대신에:

ActiveSupport::Dependencies.load_paths << "#{RAILS_ROOT}/app/widgets"

다음을 수행해야 할 수 있습니다.

ActiveSupport::Dependencies.autoload_paths << "#{RAILS_ROOT}/app/widgets"

I found I needed to do this after config block-- no access to config object anymore.

This did the trick

ActiveSupport::Dependencies.load_paths << "#{RAILS_ROOT}/app/widgets"

In config/application.rb add config.autoload_paths << "#{config.root}/models/widgets".

File should look like this:

module MyApp
  class Application < Rails::Application
    config.autoload_paths << "#{config.root}/models/widgets"
  end
end

I know this works for Rails 4 and 5. Probably others as well.

참고URL : https://stackoverflow.com/questions/1223481/adding-a-directory-to-the-load-path-in-rails

반응형