Ruby on rails Rails 6 w/Webpacker-主机URL/反向代理

Ruby on rails Rails 6 w/Webpacker-主机URL/反向代理,ruby-on-rails,ruby,nginx,webpack,Ruby On Rails,Ruby,Nginx,Webpack,我会尽量简单明了地问这个问题。试图包括所有相关的规格和细节。希望,最终,这将帮助一些人。我有一个小的rails6应用程序,使用Webpacker。一切都在开发和登台环境中完美地工作。在生产过程中,事情变得不明朗 例如,MyRails 6app/server具有URL/主机名。但是,为该应用程序设置的基础设施通过反向代理。因此,实际面向公众的URL因代理而不同,例如 我让Nginx运行并指向代理。这是配置。可能会有帮助 upstream my.rails.app.com { server 1

我会尽量简单明了地问这个问题。试图包括所有相关的规格和细节。希望,最终,这将帮助一些人。我有一个小的rails6应用程序,使用Webpacker。一切都在开发和登台环境中完美地工作。在生产过程中,事情变得不明朗

例如,MyRails 6app/server具有URL/主机名。但是,为该应用程序设置的基础设施通过反向代理。因此,实际面向公众的URL因代理而不同,例如

我让Nginx运行并指向代理。这是配置。可能会有帮助

upstream my.rails.app.com  {
  server 127.0.0.1:3000;
}

Server {
 listen 443 SSL
 server_name: hello.world.com/my/rails
 SSL cert ...
 ...
 }

location / {
  proxy_pass        http://my.rails.app.com;
  proxy_set_header  Host $http_host;
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header  X-Forwarded-For $proxy_protocol_addr;
  proxy_set_header  X-Forwarded-Proto $scheme;
  proxy_set_header  X-Real-IP $remote_addr;
  proxy_set_header  X-Forwarded-Proto: https;
  proxy_bind $server_addr;
}
在生产环境中进行测试时,我注意到的第一件事是没有任何资产(图像、JS、CSS)没有加载。我可以通过将其添加到environment/production.rb

config.relative_url_root = "/my/rails"
接下来要注意的是,
link\u to
helper方法不起作用。他们只获取主机名(hello.world.com),而不是完整路径(hello.world.com/my/rails)。我通过添加一个带有路径的ENV变量修复了这个问题

ENV['RAILS_RELATIVE_URL_ROOT'] = "/my/rails"
我的
链接到
现在看起来如下:

link_to "Example", "#{ENV['RAILS_RELATIVE_URL_ROOT']}" + some_path
我唯一不能工作的就是Webpacker。当我从浏览器“显示页面源”时,我看到Webpacker试图加载资源时出现了几个404错误。当“显示页面源”时,我看到:

https://hello.world.com/packs/media/compiled asset ... (404 error)
缺少“/my/rails”目录路径

我的问题如下:

  • 我如何告诉Rails/Webpacker查看基本URL以外的内容并使用完整路径?"https://hello.world.com/my/rails“
  • 有没有更优雅的方法?我不喜欢在指向助手的链接中使用ENV变量。它摸起来很脏。我敞开心扉,全神贯注。:)
  • 我想在我的routes文件中添加一个
    范围
    ,认为它可以解决路径问题,顺便说一句,这不起作用。这里有一个例子:
    scopeenv['RAILS\u RELATIVE\u URL\u ROOT']dosomeroute SomeOtherRoute end
    在测试URL的正确性时,会转到404页面。不太清楚为什么
我们非常欢迎任何帮助。谢谢,希望这一切都有意义