我想让所有生成的网址都以/sample_1/
为前缀。
因为服务器在子文件夹下运行,
我怎么能在Rails 4.2.4上做?以下路由规则不会生成带前缀的所有路径。
我无法通过Google找到任何可行的解决方案
Rails.application.routes.draw do
sample_1 = Proc.new do
root 'welcome#category'
end
if ENV['RAILS_RELATIVE_URL_ROOT']
scope ENV['RAILS_RELATIVE_URL_ROOT'] do
sample_1.call
end
else
sample_1.call
end
end
module Sample
class Application < Rails::Application
config.active_record.raise_in_transactional_callbacks = true
config.middleware.use Rack::Deflater
config.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
end
end
location /sample_1/ {
rewrite ^/sample_1/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8512;
}
location / {
proxy_pass http://localhost:8006;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
答案 0 :(得分:0)
您是否尝试使用:as
与scope
:
scope "admin", :as => "admin" do
resources :photos, :accounts
end
resources :photos, :accounts
这将生成admin_photos_path
和admin_accounts_path
等路线,分别映射到/ admin / photos和/admin/accounts
。
:as
使用指定的标签前缀此范围内的路由助手。
scope :as => "sekret" do
resources :posts
end
答案 1 :(得分:0)
由于内置Rails relative_url_root
选项does not seem to work,您可以使用解决方法:
Rails.application.routes.draw do
# Bad hack because relative_url_root does not work.
# @fixme, @todo
scope ENV['MYAPP_RELATIVE_URL_ROOT'] do
root 'welcome#category'
end
end
调用scope nil
实际上对结果路由没有任何作用,所以你可以简化一下。
$ rake routes MYAPP_RELATIVE_URL_ROOT=foo
Prefix Verb URI Pattern Controller#Action
root GET /foo(.:format) welcome#category
我不会在解决方法中使用RAILS_RELATIVE_URL_ROOT
,因为如果在将来的Rails版本中修复了该行为,您的应用会意外中断。因此,一种安全的方法是让RAILS_RELATIVE_URL_ROOT
取消设置,直到您知道它已修复然后删除黑客为止。
确实有效。你最有可能做错其他事。
git clone https://github.com/maxcal/sandbox/tree/33344204
cd sandbox
bundle install
MYAPP_RELATIVE_URL_ROOT=test rails s
localhost:3000/test
。你实际设置ENV vars的方式取决于你的shell。以上适用于Bash / Zsh。我猜这就是你失败的地方。
答案 2 :(得分:0)
Rails文档say you can use a scope
:
#config/routes.rb
def method
root "....."
resources :controller_1, :controller_2
end
if .......
scope :prefix_1 do
method
end
else
method
end
因为服务器正在子文件夹下运行
这应该不成为Rails的问题。
如果您希望将应用程序放在子文件夹中,则可以使用 Web服务器软件对其进行路由。
以下是nginx的示例:
server {
listen 80;
server_name your_folder.com;
root /your/app/destination/folder;
这意味着如果您坚持使用_path
助手(而不是_url
),它将使所有相对路径保持正常运行。