我正在使用Rails5应用程序,并成功地将其部署到EB容器中。
但是网络打包的资产--直接在public/packs中服务,在生产环境中返回404。
在当前情况下,我设置了RAILS_SKIP_ASSET_COMPILATION = false,所以每次部署应用程序之前我都会预编译资产。
我曾经使用heroku作为一个生产环境,当时一切都很好。
这是我的config/webpacker.yml
source_path: app/frontend/javascripts
source_entry_path: packs
public_output_path: packs # public/packs/filename-[hash].js
cache_path: tmp/cache/webpacker
# Additional paths webpack should lookup modules
# ['app/assets', 'engine/foo/app/assets']
resolved_paths: []
# Reload manifest.json on all requests so we reload latest compiled packs
cache_manifest: false
extensions:
- .js
- .sass
- .scss
- .css
- .png
- .svg
- .gif
- .jpeg
- .jpg我试过的..。
我试图将public_output_path从包更改为资产。但同样的错误依然存在..。
发布于 2018-08-02 18:17:30
我也遇到了这个问题。我不确定你用的是Nginx还是乘客。但是,如果是Nginx,您可能希望在/etc/nginx/conf.d/webapp_healthd.conf中添加如下所示的位置块:
location /packs {
alias /var/app/current/public/packs;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}然后运行sudo /etc/init.d/nginx restart。
那应该就足够让它起作用了。但是,您需要在项目中使用这些自定义设置创建一个.ebextensions/文件,这样它就不会被ElasticBean秸秆默认配置覆盖。
参见这个职位,由玛丽亚路易莎卡里翁D,以了解如何自动化的nginx配置。
发布于 2021-09-08 12:47:35
有了Amazon 2 ElasticBean秸秆平台,这就简单多了。
nginx的默认配置位于/etc/nginx/nginx.conf中,您可以看到eb ssh是否指向您的服务器。
server {...}块中有一行代码,上面写着:
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;这包括在那里,所以您可以很容易地包括您的服务器的其他位置规则。在您的应用程序中所要做的就是在根目录中创建一个.platform文件夹(如果您还没有创建),并使用这个路径创建一个配置文件:.platform/nginx/conf.d/elasticbeanstalk/10_packs_location.conf ("10_packs_location“可以是您想要的任何名称)。
输入以下文件内容:
location /packs {
alias /var/app/current/public/packs;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}然后,在下一次部署时,您将在/etc/nginx/conf.d/elasticbeanstalk/下看到新的“/etc/nginx/conf.d/elasticbeanstalk/”文件,该文件将由/etc/nginx/nginx.conf包含。完成此操作后,将应用新的位置规则。
有关更多细节,请参见这里的文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html
发布于 2021-09-30 12:36:13
另一个解决方案是让Rails自己服务于资产,而不是NGINX。
在您的config/environments/production.rb中,您可能有以下内容:
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?如果在AWS中设置RAILS_SERVE_STATIC_FILES = enabled,Rails将为资产服务。
这是Heroku:https://devcenter.heroku.com/changelog-items/617中的默认行为
这是一个很好的帖子:https://acuments.com/rails-serve-static-files-with-nginx.html
https://stackoverflow.com/questions/49096067
复制相似问题