Google 레일 4 애플리케이션은 고풍 포털을 통해 액세스 할 수 있어야합니다. 이 포털은 (브라우저의 관점에서) 각 URL에 접두어를 추가하여 작동합니다. 이 접두사는 응용 프로그램에 요청을 전달하기 전에 포털에서 제거됩니다.수신 링크가 아닌 생성 된 링크에 접두어 추가
브라우저에서 https://portal.company.com/portal/prefix/xyzzy/myapp/mymodel/new
을 호출합니다. 포털은 그 일을 수행하고 https://myserver.company.com/myapp/mymodel/new
(관련없는 접두사를 따라 전달)을 요청합니다. 접두사는 동적이며 요청간에 변경할 수 있습니다.
문제는 응용 프로그램에서 제공하는 HTML 페이지를 포털이 다시 쓸 수 없다는 것입니다. 즉 접두어에 넣지 않습니다. 응용 프로그램은 상대 URL 만 내보내거나 자체적으로 포털 접두사를 추가 할 것으로 예상합니다. 그래서
:
- 정기 URL
/myapp/mymodel/new
, 예를 들어, (포털을 사용하지 않는 특정 사용자에 대한) 응용 프로그램이 직접 액세스 할 때입니다으로 유지해야합니다. - 포털을 통해 액세스 할 때 응용 프로그램은 여전히 평소와 같이
/myapp/mymodel/new
을 이해해야합니다. 그러나mymodel_new_path
또는link_to @mymodel
또는form_for @my_model
을 사용하거나 다른 마술 URL 생성기가있는 경우에는 포털 접두어를 추가해야합니다. 따라서 응용 프로그램에서 생성 한 모든 URL은/portal/prefix/xyzzy/myapp/mymodel/new
처럼 표시되어야하며 요청 당 문자열/portal/prefix/xyzzy
은 Google에서 정의한 일부 방법으로 제공되며 (xyzzy
은 요청간에 변경 가능)
어떻게하면됩니까? 이 오늘처럼 내 routes.rb
외모 :
MyApp::application.routes.draw do
scope ' /myapp' do
get ...
이 아마 포털에서 오는 경우 들어오는 요청에서 URL이 변경되지 않기 때문에 그대로 유지한다. 그러나 나가는 URL에 어떻게 영향을 줍니까?
요청이 포털 –
@ArkadiuszOleksy에서 온 경우 모든 상대 경로에 접두어를 추가하는 간단한 미들웨어를 작성할 수 있습니다. 즉, 'html.gsub! (/ myurlroot /, "portalprefix/myurlroot '예, 그런 생각이 들었습니다. 충분히 간단해야하지만, 그런 재 작성없이 문제의 근원에서 문제를 해결하기를 바랬습니다. 다른 것이 나오지 않으면 계속 명심하십시오. – AnoE