背景
对于我的工作,我们有两个不同的网络,即开发人员网络和一般公司网络。我需要将rails应用程序暴露给两者,在子uri下运行,以便一般网络上的人可以从foo.bar.com/ {app_name}访问应用程序,并在开发人员网络上从http:// {服务器名}。{dev_network} .dev / {APP_NAME}。遗憾的是,我们不允许使用Passenger,因为这是一个企业应用程序。
目前,我的应用程序在子uri上运行,并且能够从两个网络访问,但我遇到了错误。我将列出我看到的错误,然后是我创建的nginx配置,以及使用子uri的rails_app配置。
问题
配置
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'
其他详细信息
答案 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/....