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_paths
Rails가 상수를 자동로드 할 경로의 배열을받습니다. 기본값은 아래의 모든 디렉토리 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에 문제가있는 것 같습니다.
따라서 새로운 워크 플로는 다음과 같습니다.
- / app 디렉토리에 새 폴더와 클래스를 만듭니다.
- 실행
spring stop
명령 행에 bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths'
명령 줄 에서 자동로드 경로를 확인하십시오 . 이제 새 폴더가 나열됩니다.- 실행
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
'programing' 카테고리의 다른 글
장치에서 실행중인 번들의 펜촉에서 참조 된 이미지를로드 할 수 없습니다. (0) | 2020.11.22 |
---|---|
Swift-문자열에서 "문자 제거 (0) | 2020.11.22 |
디버그 모드에서 프로그램을 실행하는 것은 매우 느립니다. (0) | 2020.11.22 |
Xcode 8은 iOS 10에 대해 깨진 NSManagedObject 하위 클래스를 생성합니다. (0) | 2020.11.22 |
기존 소스에서 프로젝트를 열 때 "소스 디렉토리가 이미 netbeans 프로젝트입니다"오류 (0) | 2020.11.22 |