Ruby on rails Rails 6 w/Webpacker-主机URL/反向代理
我会尽量简单明了地问这个问题。试图包括所有相关的规格和细节。希望,最终,这将帮助一些人。我有一个小的rails6应用程序,使用Webpacker。一切都在开发和登台环境中完美地工作。在生产过程中,事情变得不明朗 例如,MyRails 6app/server具有URL/主机名。但是,为该应用程序设置的基础设施通过反向代理。因此,实际面向公众的URL因代理而不同,例如 我让Nginx运行并指向代理。这是配置。可能会有帮助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
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页面。不太清楚为什么
我们非常欢迎任何帮助。谢谢,希望这一切都有意义