2012-01-11 3 views
0

starman을 사용하여 plackup에서 웹 응용 프로그램을 실행하고 사용자 요청에 따라 패키지를 동적으로로드하고 인스턴스화하려고합니다. 'require $ packageName;'을 사용하고 있습니다. $ packageName에 패키지 이름이 들어있는 패키지를로드하려면 이름이 구성 파일에 저장됩니다. 그런 다음 모든 클래스가 기본 클래스에서 상속 받고 알려진 메소드 세트를 포함하므로 알려진 명령 세트를 인스턴스에서 실행합니다.Starman을 사용하여 plackup에서 동적 패키지로드

이것은 Apache에서 잘 작동하지만 plackup은 @INC에 라이브러리 경로가 포함되어 있고 패키지 이름이 lib 경로의 마지막 디렉토리에서 절대적이더라도 패키지를 찾을 수 없다고 말합니다. 즉, 패키지 이름은 Base :: My :: Package입니다.

누구든지이 문제가 발생합니까? Starman 내의 다른 경로를 업데이트해야합니까? 나는 환경 변수 PERL5LIB를 업데이트 할뿐만 아니라 -I 플래그로 plackup을 실행하고있다. 나는 또한 메인 애플 리케이션 클래스에서 'use lib /...'을 시도했지만 이들 중 아무 것도 작동하지 않습니다. 그들은 barewords로 지정 때

감사

+0

예 참조 :'starman -e'my $ 패키지 = "템플릿"; $ package가 필요합니다. my $ t = $ package-> new; return [200, [ "Content-Type"=> "text/plain"], [ "ok"]]; ' – daxim

+0

이것은 작동하지 않는 것에 대한 예입니다. – MadHacker

+0

eval "use $ package"; 트릭을 했어 – MadHacker

답변

1

require는 모듈 이름 (예를 들어, 스칼라 :: 백분율)를 받아 들일 것입니다. require에 문자열을 입력하면 모듈에 대한 상대 경로 여야합니다 (예 : Scalar/Util.pm). eval (eval의 문자열 매개 변수 형식) 내부에 require을 입력하여이 문제를 해결할 수 있습니다. eval "require $package".

Check the list of module installed in machine