首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在弹性豆柄容器中服务Rails应用程序的网络打包资产?

如何在弹性豆柄容器中服务Rails应用程序的网络打包资产?
EN

Stack Overflow用户
提问于 2018-03-04 13:43:50
回答 4查看 757关注 0票数 6

我正在使用Rails5应用程序,并成功地将其部署到EB容器中。

但是网络打包的资产--直接在public/packs中服务,在生产环境中返回404。

在当前情况下,我设置了RAILS_SKIP_ASSET_COMPILATION = false,所以每次部署应用程序之前我都会预编译资产。

我曾经使用heroku作为一个生产环境,当时一切都很好。

这是我的config/webpacker.yml

代码语言:javascript
复制
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从包更改为资产。但同样的错误依然存在..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-02 18:17:30

我也遇到了这个问题。我不确定你用的是Nginx还是乘客。但是,如果是Nginx,您可能希望在/etc/nginx/conf.d/webapp_healthd.conf中添加如下所示的位置块:

代码语言:javascript
复制
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配置。

票数 4
EN

Stack Overflow用户

发布于 2021-09-08 12:47:35

有了Amazon 2 ElasticBean秸秆平台,这就简单多了。

nginx的默认配置位于/etc/nginx/nginx.conf中,您可以看到eb ssh是否指向您的服务器。

server {...}块中有一行代码,上面写着:

代码语言:javascript
复制
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;

这包括在那里,所以您可以很容易地包括您的服务器的其他位置规则。在您的应用程序中所要做的就是在根目录中创建一个.platform文件夹(如果您还没有创建),并使用这个路径创建一个配置文件:.platform/nginx/conf.d/elasticbeanstalk/10_packs_location.conf ("10_packs_location“可以是您想要的任何名称)。

输入以下文件内容:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2021-09-30 12:36:13

另一个解决方案是让Rails自己服务于资产,而不是NGINX。

在您的config/environments/production.rb中,您可能有以下内容:

代码语言:javascript
复制
# 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49096067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档