在生产环境中理解Rails 4中的资产如何工作

3

当我运行时

rake assets:precompile

编译后的资源将被写入 pubic/assets 目录下:
I, [2013-07-21T02:16:00.987988 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/glyphicons-halflings-white-62b67d9edee3db90d18833087f848d6e.png
I, [2013-07-21T02:16:01.037698 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/glyphicons-halflings-c806376f05e4ccabe2c5315a8e95667c.png
I, [2013-07-21T02:16:01.053630 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/marketing/slider-base/slide-01-b85e542137a02bedd6c30dede873ef1e.jpg
I, [2013-07-21T02:16:01.066371 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/marketing/slider-base/slide-02-e5106e911d8a0289bfaf2ac64308a640.jpg
I, [2013-07-21T02:16:01.077879 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/marketing/slider-base/slide-03-990dccbed4c70f0118b7d30d98094811.jpg
I, [2013-07-21T02:16:01.965560 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/application-98713f9763bccfd6bc05dae422d3e242.js
I, [2013-07-21T02:16:02.068469 #13881]  INFO -- : Writing /home/jpereira/dev/saleshub/public/assets/application-a40c2cd9b0f20b2a7f3b62d45159fbb3.css

然后,我使用以下命令在生产环境中启动应用程序:

RAILS_ENV=production rails s

=> Booting WEBrick
=> Rails 4.0.0 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2013-07-21 02:20:49] INFO  WEBrick 1.3.1
[2013-07-21 02:20:49] INFO  ruby 2.0.0 (2013-06-27) [x86_64-linux]
[2013-07-21 02:20:49] INFO  WEBrick::HTTPServer#start: pid=13903 port=3000

但是渲染的页面中,不要去寻找预编译的资源。在渲染的模板中,我得到了以下内容:
<!DOCTYPE html>
<html>
<head>
  <title>App Home Pagetitle>

  <link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" />
  <link href="/stylesheets/application.css" media="all" rel="stylesheet" />
  <link href="/stylesheets/marketing.css" media="all" rel="stylesheet" />
  <script src="/javascripts/application.js"></script>
  <script src="/javascripts/marketing.js"></script>
  <meta content="authenticity_token" name="csrf-param" />
  <meta content="8XQYBZWrTxmfdGvQYCK0JwQDfr2pt8si+FjW4a30SsA=" name="csrf-token" />
</head>
<body>

</body>
</html>

模板如下所示:
!!! 5
%html
  %head
    %title App Home Page
    =yield(:head)
    = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true
    = stylesheet_link_tag "application", params[:controller], :media => "all"
    = javascript_include_tag "application", params[:controller]
    = csrf_meta_tags
  %body
    =flash_messages(flash)
    = yield

我的production.rb内容如下:

WebApp::Application.configure do 
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_assets = false
  config.assets.js_compressor = :uglifier
  config.assets.compile = false
  config.assets.digest = true
  config.assets.version = '1.0'
  config.log_level = :info
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
  config.log_formatter = ::Logger::Formatter.new

结束

我需要配置什么,才能让stylesheet_link_tag和javascript_include_tag在生产环境中选择正确的资产位置?

谢谢

3个回答

8
我刚刚写了一个类似的问题,当你的问题在相关边栏中出现时 :)
我发现一篇博客建议这是一个错误,并且通过设置博客可以莫名其妙地缓解这个问题。
config.assets.compile = true

最终我回答了自己的问题

谢谢。我不知道这在Rails4中是个问题。 - Natus Drew

1
如果您在子文件夹中创建资源,则需要为文件添加路径前缀:config.assets.precompile +=%w(admin/admin.css admin/admin.js)。您可以在environments/production.rb中找到此命令的注释。
config.assets.compile = true设置为true是不好的选择,它会使速度变慢并且没有必要。
一旦您将自定义资产添加到config.assets.precompile中,请在终端中运行bundle exec rake assets:precompile RAILS_ENV=production以编译资产。

0

我相信你可能想看以下内容:Edge Rails Guide

在Rails 4.0中,预编译资产不再自动从vendor/assets和lib/assets复制非JS/CSS资产。Rails应用程序和引擎开发人员应将这些资产放在app/assets或配置config.assets.precompile。

此外,我相信您可以通过在config/application.rb中执行以下操作来指定您的JS文件

config.assets.precompile += %w( 'application.js', 'application.css',
                                 #specify CSS or JS files inside here! )

然后执行:
``` bundle exec rake assets:precompile RAILS_ENV=production ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接