Запуск Rails + Пассажир + Создать из подкаталога?

У меня есть сервер A, который проксирует весь трафик на /rails на сервер B.

Итак, я настраиваю этот виртуальный хост, и большинство вещей работает... хорошо. link_to сломан и генерирует URL-адреса /users в отличие от /rails/users, но я могу обойти это.

Если я установил config.action_controller.relative_url_root в /rails, тогда мои маршруты будут работать нормально, ЗА ИСКЛЮЧЕНИЕМ всех маршрутов разработки. Они указывают на пустой URL. Как правильно настроить сервер B, чтобы понять, что он работает в подкаталоге и правильно генерирует ссылки и маршруты?

<VirtualHost *:80>
    ServerName http://ec2-url.compute-1.amazonaws.com/
    SetEnv RDS_HOSTNAME "mydb..."
    SetEnv RAILS_RELATIVE_URL_ROOT "/rails"

    DocumentRoot /home/ubuntu/myapp/public
    RailsEnv staging 
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/app.log combined
    PassengerLogLevel 3
    <Directory "/home/ubuntu/myapp/public">
 Options FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
   Options -MultiViews
   Require all granted
    </Directory>
</VirtualHost>

Я использую Rails 4.

Ответ 1

В файлах среды добавьте конфигурацию для OmniAuth.config.full_host.

OmniAuth.config.full_host = 'http://myfullurl/subdir'

Теперь, в application_controller.rb, добавьте этот метод:

def after_sign_in_path_for(resource_or_scope)
    path = super(resource_or_scope)
    "#{OmniAuth.config.full_host}#{path}"
end

Ответ 2

Было бы здорово, если вы поделитесь своим routes.rb, но я думаю, что простой способ изменить разрабатываемые маршруты состоит в следующем: routes.rb

scope '/rails' do
  devise_for :users
end