托管Rins应用程序在Thins上,Nginx在子uri上,在反向代理后面

时间:2013-10-25 16:01:53

标签: ruby-on-rails ruby nginx ruby-on-rails-4 reverse-proxy

背景

对于我的工作,我们有两个不同的网络,即开发人员网络和一般公司网络。我需要将rails应用程序暴露给两者,在子uri下运行,以便一般网络上的人可以从foo.bar.com/ {app_name}访问应用程序,并在开发人员网络上从http:// {服务器名}。{dev_network} .dev / {APP_NAME}。遗憾的是,我们不允许使用Passenger,因为这是一个企业应用程序。

目前,我的应用程序在子uri上运行,并且能够从两个网络访问,但我遇到了错误。我将列出我看到的错误,然后是我创建的nginx配置,以及使用子uri的rails_app配置。

问题

  • 转到{app_name} / foo / 1 - 正在从{app_name} / foo / {app_name} / assets获取页面上的所有图像......这仅适用于RESTful服务的显示页面。
  • 在任一网络上刷新页面,重新加载页面,但删除附加到该页面的所有样式和js文件。除了上面提到的问题之外,转到另一个链接不会影响样式。

配置

Nginx的 站点中的VHost可用,符号链接到启用站点。

upstream claxon {
    server 127.0.0.1:3000;
}

server {

    listen 80;
    server_name claxon;
    root /var/www;

    location ~* ^/claxon/ {
            alias /var/www/claxon/public;
            proxy_pass http://claxon;
    }

    location ^~ /assets/ {
            root /var/www/claxon/public/claxon;
    }

    location ^~ /original_user_images/ {
            root /var/www/claxon/public/claxon;
    }
}

Rails App

配置/初始化/ mount_location.rb

if Rails.env.production?
  Rails.application.config.relative_url_root = '/claxon'
end

config.ru

map Rails.application.config.relative_url_root || '/' do
  run Rails.application
end

配置/环境/ production.rb

# Configures assets to be compiled under public/claxon/assets
config.assets.prefix = 'claxon/assets'

其他详细信息

  • 此应用程序正在使用capistrano和服务器部署到服务器 当前文件夹正在符号链接到/ var / www / claxon文件夹。
  • 此应用使用carrierwave进行用户图片上传。

1 个答案:

答案 0 :(得分:1)

这个问题的答案是最终将rails app配置为从'asset_host'服务资产。我将资产主机URL设置为与从企业网络连接到服务器相同,因为开发人员网络包含在其中,但企业网络无法看到开发网络。以这种方式配置它允许两个网络接收资产,并在刷新时工作。

production.rb文件中的最终配置就是这样。

# Enable serving of images, stylesheets, and JavaScripts from an asset server.
config.action_controller.asset_host = "https://foo.bar.com/claxon/"

这允许所有资产都来自https://foo.bar.com/claxon/claxon/assets/....