2014-09-22 2 views
0

내 응용 프로그램 컨트롤러에서 데이터베이스 로깅 요청을 수행하려고합니다. 하지만 나는 이 아니라가 크롤러의 요청을 기록하지 않도록하고 싶습니다. IP 주소로 식별 할 수 있다고 가정 해보십시오. 그래서 내와 ApplicationController에서이 같은 필터 전에를 만들 수 있습니다ApplicationController에서 상수가 될 초기화하는 방법은 무엇입니까?

응용 프로그램 컨트롤러에서 나는 @crawler_ips를 초기화 할
do_log_request unless @crawler_ips.include? ip_address 

? 데이터베이스에서로드하려고하지만 응용 프로그램이 시작될 때 한 번만로드한다고 가정 해보십시오.

클래스 변수를 사용하려고 생각했지만 class vars를 사용하는 것은 좋지 않다는 경고가 나타납니다 (사실). 요청이 올 때마다 @crawler_ips을 초기화하는 것을 원하지 않습니다 (모든 요청마다 새 컨트롤러가 만들어지기 때문에 발생합니다.)

답변

0

이 논리의 대부분을 컨트롤러, 난 /lib 지정된 IP 로직을 처리하는 모듈을 만들거야 ... 나는 그것을 SpecialIPs 참조를 위해 전화 할게.

원하는 경우 크롤러 IP를 설정하는 초기화 프로그램을 만들 수 있습니다. 거기에서 crawler?이라는 모듈 함수를 작성하여 주어진 IP 주소가 크롤러 IP이면 참을 리턴 할 수 있습니다. 이제 앱의 어느 곳에서나 SpecialIPs.crawler?(some_ip_address)에 전화 할 수 있습니다.

이 메서드를 컨트롤러 및 뷰에서 약간 더 쉽게 사용할 수 있도록 도우미 메서드로 별칭을 지정하려면 별칭이 SpecialIPs.crawler? 인 도우미 메서드 crawler?을 추가하십시오. 컨트롤러에서이 방법을 사용하면 간단하게 do_log_request unless crawler?(ip_address)을 쓸 수 있습니다.

+0

대답은 Thx입니다. 초기화 프로그램은 어떻게 생겼습니까? 레일 도우미 메서드를 사용하면 ApplicationHelper의 메서드를 의미합니까? 나는 여전히 레일에 약간 새로운 편이다. – vrepsys

+0

@vrepsys 당신은 ApplicationHelper에 메서드를 넣을 수 있지만 일반적으로 각 도우미 모듈에는 IP 관련 메서드에 대한 새로운 도우미 모듈을 제안 할 관련 메서드 만 포함되도록 도우미를 분할하는 것이 좋습니다. 헬퍼 파트는 완전히 선택적입니다. 컨트롤러 및 뷰의 편의를 위해서입니다. 정교하게 대답을 업데이트했습니다. – animatedgif

0

매우 간단하게하기 위해 에 my_constants.rb이라는 파일을 만듭니다. 여기 레일 환경에 포함시키려는 상수를 추가 할 수 있습니다. 참고로 개발 과정에서 파일을 변경하기 전에 서버를 다시 시작해야합니다.

CrawlerIps = [#include ips as array] 

CrawlerIps 응용 프로그램에서 어디서나 사용할 수 있습니다 :

my_constants.rb에서 같은 것을 넣어.

이것은 지나치게 간단 할 수 있으며 결국 코드가 복잡해 지겠지만 빠른 수정이 필요한 경우이 작업을 수행해야합니다.

관련 문제