从子目录运行Rails + Passenger + Devise?

时间:2015-04-10 19:50:31

标签: ruby-on-rails apache devise passenger omniauth

我有一台服务器A,它将/rails上的所有流量代理到服务器B.

所以我设置了这个虚拟主机,大多数工作都可以......好吧。 link_to已被破坏,并生成/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。

2 个答案:

答案 0 :(得分:5)

在您的环境文件中,添加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

答案 1 :(得分:0)

如果您分享routes.rb会很棒,但我认为更改设计路线的简单方法是在routes.rb

中添加以下内容
scope '/rails' do
  devise_for :users
end