0

背景

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

目前,我的应用程序在子 uri 上运行,并且可以从两个网络访问,但我遇到了错误。我将列出我看到的错误,然后是我创建的 nginx 配置,以及使用 sub 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 应用程序

配置/初始化程序/mount_location.rb

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

配置.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 上传用户图片。
4

1 回答 1

1

这个问题的答案是最终将 rails 应用程序配置为从“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/....

于 2013-10-25T16:57:32.097 回答