背景
对于我的工作,我们有两个不同的网络,开发者网络和一般公司网络。我需要向两者公开 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 上传用户图片。