【问题标题】:assets rails 3.1 not load after precompile nginx + unicorn预编译 nginx + unicorn 后资产 rails 3.1 未加载
【发布时间】:2012-04-07 05:14:27
【问题描述】:

我正在尝试在生产环境中预编译资产。但预编译后,应用程序找不到图像文件、javascripts 文件、css 文件...等。

我运行这个命令:

RAILS_ENV=production rake assets:precompile

我得到了这个结果:

/home/hyperrjas/.rvm/rubies/ruby-1.9.2-p318/bin/ruby /home/hyperrjas/.rvm/gems/ruby-1.9.2-p318/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
/home/hyperrjas/.rvm/rubies/ruby-1.9.2-p318/bin/ruby /home/hyperrjas/.rvm/gems/ruby-1.9.2-p318/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets

然后我尝试重新加载页面,我看到了这个:

我正在使用 nginx + 独角兽。

为什么应用找不到资产、图片、css、javascript...

已编辑**

我从 application.html.erb 加载我的资产布局:

<%= stylesheet_link_tag    "application" %>
  <%= javascript_include_tag "application" %>

我的 nginx.conf 中有这个在服务器 { }

location ~ ^/(assets)/  {
                          root ~/mydomain.com/current/public;
                          gzip_static on; # to serve pre-gzipped version
                          expires max;
                          add_header  Cache-Control public;
                         }

谢谢

【问题讨论】:

  • 你在environments/production.rb中设置了“config.assets.digest = true”吗?
  • 是的,我在config/environments/production.rb 下一个:# Generate digests for assets URLs config.assets.digest = true
  • 您能否从 html 源代码或服务器日志中看到正在请求的生成 404 的路径是什么?
  • 我可以在 html 标签中的 firebug 中看到:&lt;link type="text/css" rel="stylesheet" media="screen" href="/assets/application-757164eb38463ea8d323f05b3a3238ca.css"&gt; &lt;script type="text/javascript" src="/assets/application-203db49c9ee856182159ad4bce51bf0e.js"&gt;
  • 如何在视图中包含资产?您是直接引用资产还是引用清单?

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline production-environment


【解决方案1】:

问题已解决 :D:

错误出现在 nginx.conf 中:

location ~ ^/(assets)/  {
                         root ~/mydomain.com/current/public;
                         gzip_static on; # to serve pre-gzipped version
                         expires max;
                         add_header  Cache-Control public;
                        }

资产的根路径错误,正确的形式是:

 location ~ ^/(assets)/  {
                            root /home/hyperrjas/mydomain.com/current/public;
                            gzip_static on; # to serve pre-gzipped version
                            expires max;
                            add_header  Cache-Control public;
                           }

谢谢!

【讨论】:

    【解决方案2】:

    首先,

    你能检查一下 - 清单文件和指令 app/assets/javascripts/application.js应该是

    // ...
    //= require jquery
    //= require jquery_ujs
    //= require_tree
    
    app/assets/stylesheets/application.css
    
    /* ...
    *= require_self
    *= require_tree .
    */
    

    检查,在您的应用程序的 config/environment/production.rb 中进行以下设置 应该是真的

    config.assets.compile = true

    如果你想要一个资产 URL 的摘要,如果它是假的,则在下面设置为真。

    config.assets.digest = true
    

    几个参考链接

    http://mrjaba.posterous.com/rails-31-asset-pipeline-with-nginx-and-passen

    http://guides.rubyonrails.org/asset_pipeline.html

    【讨论】:

    • 对不起,我已经检查了这条指令,但它对我不起作用:(。同样的结果。我用 config nginx 为资产编辑了帖子
    猜你喜欢
    • 2011-12-20
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2011-11-30
    • 2016-10-26
    相关资源
    最近更新 更多