복붙노트

[RUBY-ON-RAILS] ActionController :: Base.relative_url_root에 대한 대체 무엇입니까?

RUBY-ON-RAILS

ActionController :: Base.relative_url_root에 대한 대체 무엇입니까?

나는 rails3에 응용 프로그램을 레일 2.X를 포팅하고; 우리는 foo는 - 응용 프로그램을 호출 할 수 있습니다. 푸 - 응용 프로그램은 main_rails_app.com/foo-app에서 큰 레일 애플 리케이션과 삶의 한 부분입니다. 이전에 우리는 단지 우리의 foo는-응용 프로그램 경로가 제대로 작동하는지 확인하기 위해 우리의 foo는-응용 프로그램 제작 설정에서 다음을 설정합니다 :

ActionController::Base.relative_url_root = "/foo-app"

그러나 rails3으로, 지금 얻을 :

DEPRECATION WARNING: ActionController::Base.relative_url_root is ineffective. Please stop using it.

나는 이후 다음에 설정 항목을 변경 :

config.action_controller.relative_url_root = "/foo-app"

이것은 주로 외부 자원 (자바 스크립트 / CSS / 이미지)에 대한 모든 호출 / foo는-응용 프로그램을 사용하는 것입니다 작동합니다. 하지만, 내 경로 중 어느 것도 적절하게 변경하지, 또는 다른 방법을 넣어, foo는-응용 프로그램 root_path는 '/'내가 기대 '/ foo는-응용 프로그램'나를 수 있습니다.

두 가지 질문 :

해결법

  1. ==============================

    1.당신은 routes.rb 파일 내에서 모든 것을 처리 할 수 ​​있어야합니다. 범위에있는 모든 현재의 경로를 감싸 라 예를 들어.

    당신은 routes.rb 파일 내에서 모든 것을 처리 할 수 ​​있어야합니다. 범위에있는 모든 현재의 경로를 감싸 라 예를 들어.

    scope "/context_root" do
       resources :controller
       resources :another_controller
       match 'welcome/', :to => "welcome#index"
       root :to => "welcome#index"
    end
    

    그런 다음 그들은 당신의 컨텍스트 루트를 포함하여, 그에 따라 경로를 표시해야합니다 레이크 경로를 통해 라우팅을 확인할 수 있습니다 (relative_url_root)

  2. ==============================

    2.당신이 승객을 통해 배포하는 경우, RackBaseURI 지시어를 사용 http://www.modrails.com/documentation/Users%20guide%20Apache.html#RackBaseURI

    당신이 승객을 통해 배포하는 경우, RackBaseURI 지시어를 사용 http://www.modrails.com/documentation/Users%20guide%20Apache.html#RackBaseURI

    그렇지 않으면, 다음 블록과의 config.ru에서 실행 문을 포장 할 수 있습니다 :

    map ActionController::Base.config.relative_url_root || "/" do
      run FooApp::Application
    end
    

    그럼 당신은 단지 "/ foo는-응용 프로그램"에 환경 변수 RAILS_RELATIVE_URL_ROOT을 설정해야합니다. 이것은 심지어 보석 또는 플러그인에서 설정 한 경로에 적용됩니다.

    경고 :이 두 솔루션을 함께 사용하지 마십시오.

  3. ==============================

    3.내가해야처럼 지나치게 복잡하게 이것을 및 / 또는 뭔가가 있지만,이 문제가 지금 여기있는 동안 나를 실망하고있다 것은 내 노트입니다 생각합니다.

    내가해야처럼 지나치게 복잡하게 이것을 및 / 또는 뭔가가 있지만,이 문제가 지금 여기있는 동안 나를 실망하고있다 것은 내 노트입니다 생각합니다.

    동적 및 정적 라우팅은 2 점으로 각각 두 개의 문제가 있습니다 :

    한 가지 방법은 네 가지 점을 해결하기 위해 :

    # config.ru
    map '/relative_root' do
      run Myapp::Application
    end
    

    커버 URL은, 예를 들어 URL 헬퍼에 의해 생성 그래서 UserController 주어, users_path은 상대 URL 루트 접두어됩니다.

    # config.ru
    class ScriptName
      def initialize(app, name)
        @app = app
        @name = name
      end
    
      def call(env)
        env['SCRIPT_NAME'] += @name
        @app.call(env)
      end
    end
    
    use ScriptName, '/relative_root'
    run Rails.application
    
    # config/routes.rb
    Myapp::Application.routes.draw do
      scope '/relative_root' do
        ...
      end
    end
    

    이 같은 설정을 감안할 때 :

    upstream myapp {
      server localhost:3000;
    }
    
    server {
      ...
      location /relative_root {
        proxy_pass http://myapp/;
      }
    }
    

    Nginx에는 /의 relative_root을 제거하며, 레일 응용 프로그램은 표시되지 않습니다. 당신은 레일 앱 그래서 그것을보고해야하는 경우, 하나의 방법은 proxy_pass 라인을 변경하는 것입니다 :

    ...
        proxy_pass http://myapp/relative_root/;
    ...
    
  4. from https://stackoverflow.com/questions/3181746/what-is-the-replacement-for-actioncontrollerbase-relative-url-root by cc-by-sa and MIT license