我已经在 application.rb 文件中部署了启用 Asset Pipeline 的 rails 应用程序:
# Enable the asset pipeline
config.assets.enabled = true
当我检查时,我可以看到目录中的文件已被编译器处理,public/assets
但是当我浏览网站时,浏览器无法解析任何资产。如果我直接访问资产,我将看到 Nginx 的 404 消息。
有人可以告诉我发生了什么事吗?
我已经在 application.rb 文件中部署了启用 Asset Pipeline 的 rails 应用程序:
# Enable the asset pipeline
config.assets.enabled = true
当我检查时,我可以看到目录中的文件已被编译器处理,public/assets
但是当我浏览网站时,浏览器无法解析任何资产。如果我直接访问资产,我将看到 Nginx 的 404 消息。
有人可以告诉我发生了什么事吗?
基本上,编译和 gzip 压缩的文件不存在于正确的目录中。
如果您在开发环境中运行,config.assets.compile = true
请尝试设置。config/environments/development.rb
它会在调用时动态生成资产文件。这对生产不利,因为它会降低性能
因此,如果您在生产环境中,请尝试运行
rake assets:precompile
我最近偶然发现了同样的问题。我假设您在谈论生产环境。application.rb
解决方案是通过这样做再次要求链轮
require 'sprockets/railtie'
或者
require 'rails/all'
这已经丢失了,因为我们没有使用整个 Rails 框架并关闭了 ActiveRecord 以支持 Mongoid。陷阱在于,当将 Rails 更新到较新版本时,您可能不会注意到rails/all
正在更改其内容。
尽管上面的答案很好,但这不是我的问题。除了 Nginx 没有正确配置之外,Rails 正在执行写入操作。我的 Nginx 配置指向主应用程序目录而不是public
目录。
所以原来是这样的:
server {
server_name wptrends.envato.com;
root /home/deployer/apps/report/current;
...
什么时候应该是这样的:
server {
server_name wptrends.envato.com;
root /home/deployer/apps/report/current/public;
...