【问题标题】:Assets precompiled but not showing with puma & nginx (Rails 4)资产预编译但不显示 puma 和 nginx (Rails 4)
【发布时间】:2015-10-08 21:38:00
【问题描述】:

当我这样做时在我的本地机器上:

RAILS_ENV=production bundle exec rake assets:precompile
RAILS_ENV=production bundle exec puma -e production

一切正常。但是,我在 docker 容器中有完全相同的应用程序,用于与 nginx 一起运行的生产。我可以使用 chrome 开发工具在 assets 文件夹中看到 application.css 和 application.js 文件,它们不是空的。但是我有一个没有css/js的页面,应该和nginx有关,但我真的很困惑。

/var/etc/nginx/nginx.conf:

user app sudo;

http{

  upstream app {
    server unix:/home/app/puma.sock fail_timeout=0;
  }

  server {
    listen 80 default;
    root /home/app/app/public;
    try_files $uri/index.html $uri @app;

    location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app;
    }
  }

  }

  events {worker_connections 1024;}

config/environments/production.rb:

Rails.application.configure do
  ...
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_files = true
  config.assets.js_compressor = :uglifier
  config.assets.compile = false
  config.assets.digest = true
  ...
  end

请不要犹豫,提出任何建议。 :)

更新: 我刚刚意识到我的控制台中有这两个错误:

new:11 Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost/assets/application-5574b338d88d13681ef38b9b0800bc47.css".
new:12 Resource interpreted as Script but transferred with MIME type text/plain: "http://localhost/assets/application-ea59e17aff7f15a316e3e03d49f3daf4.js".

【问题讨论】:

    标签: ruby-on-rails nginx puma


    【解决方案1】:

    如果您希望 nginx 为您的静态资产提供服务,您需要设置 config.serve_static_files = false 这样 Rails 就不会尝试为您做这件事。

    【讨论】:

    • 感谢您的回复,我已将 config.serve_static_files 更改为 false,但是当我将 root 更改为 /home/app/app/public/assets 时,资产甚至不会显示在 chrome 工具中.我已经更新了我的问题,你能看看吗?
    • 我在 jscss 文件夹上完全错了。在您的配置中添加include /etc/nginx/mime.types; 将消除这些错误。
    • 如何在视图中包含样式表和 js 文件?
    • 我没有做任何特别的事情。我的应用程序布局头中有一个 stylesheet_link_tag 和一个 javascript_include_tag。我将 sass-rails 用于 css,我在 application.css.css 文件中导入 css.scss 文件,并将 css 文件添加到带有 *= 要求 css_file 的供应商文件夹中。我的观点中确实有一些 js 脚本。但我认为这个问题来自我的 nginx.conf 文件。
    • application.css 和 application.js 在那里,但浏览器不读取它们。
    猜你喜欢
    • 2015-12-16
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多