모델, 컨트롤러 등에 속하지 않는 사용자 정의 클래스가 있다고 가정하면이 파일을/lib에 넣어야합니다.레일로드 경로 질문
레일에서 < 3이 내 디렉토리를 내 loadpath에 추가하고 레일스 3+에서 이것을 autoload_path에 추가합니다. 이 올바른지?
이제 이미 정의 된 클래스를 확장하는 몇 가지 클래스가 있다고 가정 해 보겠습니다. 시작할 때 어디서 실행해야합니까? 예를 들어 String에 'foo'메서드를 추가하고 싶습니다.
class String def foo 'foo; end end
시작시이 클래스를 어디에 정의해야합니까?
또 다른 이상한 버그는 내가 lib의 네임 스페이스 클래스를 만들려고 할 때입니다. 콘솔에서 이제
module MyProject class Foo end end
:
ruby-1.9.2-p136 :004 > MyProject::Foo LoadError: Expected /Users/me/workspace/my_project/lib/foo.rb to define Foo from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:492:in `load_missing_constant' from /Users/rob/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:183:in `block in const_missing'
나는이 오류가 점점 계속. 이 파일을 어떻게로드 할 수 있습니까?
가방은 실제로 오타였습니다. 여전히 오류가 발생합니다. 다른 곳에서는 이니셜 라이저처럼 자동로드 된 파일을 둘 수 있습니까? 상수가 정의되지 않은 경우에만 Rails3이 autoloads를 호출 할 때 Rails3이 자동로드를 호출하는 이유를 확신하지 못합니다. – HelpMe
autoload_paths와 함께 Rails를 시작할 때 한 번만로드 될 디렉토리를 정의 할 수있는 autoload_once_paths를 사용할 수 있습니다. 테스트 중에는 콘솔이나 레일 앱을 완전히 다시 시작해야합니다. 개발 중에도 초기화 프로그램과 autoload_only_once 경로는 개발 중에도 한 번만로드됩니다. –
정말 혼란스러운 것은 "자동로드"가 실제로 자동으로 아무것도로드하지 않는다는 것입니다. 클래스 패스에 추가됩니다. config/initializers의 모든 것이 실제로 자동으로로드됩니다. 즉, 시작시 실행됩니다. – HelpMe