运行 Rails+Passenger+Devise 来自子目录?
Running Rails+Passenger+Devise from a subdirectory?
我有一个服务器 A,它将 /rails
上的所有流量代理到服务器 B。
所以我设置了这个虚拟主机,大部分都可以正常工作...好吧。 link_to
已损坏并生成指向 /users
的 URL,而不是 /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.
如果你分享你的 routes.rb
会很棒,但我认为更改设计路线的简单方法是在 routes.rb
中添加类似以下内容
scope '/rails' do
devise_for :users
end
在您的环境文件中,为 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
我有一个服务器 A,它将 /rails
上的所有流量代理到服务器 B。
所以我设置了这个虚拟主机,大部分都可以正常工作...好吧。 link_to
已损坏并生成指向 /users
的 URL,而不是 /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.
如果你分享你的 routes.rb
会很棒,但我认为更改设计路线的简单方法是在 routes.rb
scope '/rails' do
devise_for :users
end
在您的环境文件中,为 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