【问题标题】:Rails asset pipeline concatenates application.css and js in development but not in productionRails 资产管道在开发中连接 application.css 和 js,但在生产中不连接
【发布时间】:2016-01-24 10:49:37
【问题描述】:

我们目前在生产服务器上使用资产管道来预编译单个 CSS 和 JavaScript 资产,但不要将它们合并到单个文件中,例如我们有以下配置:

config.assets.precompile += %w( *.js *css fonts/*)

我能够在配置了生产设置的开发系统上将 CSS 和 JavaScript 文件预编译为单个 CSS 和单个 JS 文件。 但是,当我尝试在生产服务器上进行预编译时,我没有收到任何错误,只是清空了 application.js 和 application.css 文件。

我已经做了很多阅读(包括这里的 SO)并尝试了不同的东西,但似乎没有什么是相关的。 我很想听听任何指示或建议,以便生产 application.css 和 application.js 包含连接的文件内容。

提前致谢

以下是开发和生产配置的相关sn-ps:

app/assets/stylesheets/application.css.scss.erb

/* ...
*= require cssexample1
*= require cssexample2
*/

app/assets/javascripts/application.js

//= require jsexample1
//= require jsexample2

config/application.rb

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end


module StudySoup
  class Application < Rails::Application


    # Enable the asset pipeline
    config.assets.enabled = true

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'
  end
end

开发设置

这将完全按照预期创建已编译的 application.js 和 application.css

ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
'RUBY_VERSION' in irb: 1.9.3
rails: 3.2.1
rake: 10.4.2

config/environments/development.rb

config.assets.debug = false

config.serve_static_files = true
config.assets.compress = true
config.assets.compile = true
config.assets.digest = true
config.assets.precompile += %w( *.js *css fonts/*)

编译:

rm -rf tmp/cache/*
RAILS_ENV=development bundle exec rake assets:clean assets:precompile

结果:

public/assets/manifest.yaml 包含条目和 public/assets/application.js 和 application.css(以及缓存清除副本)现在包含连接的文件

生产设置

这会创建一个空的 application.js 和 applciation.css :(

ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
'RUBY_VERSION' in irb: 2.1.2
rails version: 3.2.1
rake, version 10.4.2

config/environments/production.rb

config.serve_static_assets = true
config.assets.compress = true
config.assets.compile = true
config.assets.digest = true
config.assets.precompile += %w( *.js *css fonts/*)

编译:

rm -rf tmp/cache/*
rake assets:clean assets:precompile

结果:

public/assets/manifest.yaml 包含条目和 public/assets/application.js 和 application.css(和缓存破坏副本)存在但为空(长度 0)

【问题讨论】:

  • 可能不相关,但 rails 3.2.1 并未正式支持 ruby​​ 2.1.2(请参阅 stackoverflow.com/questions/25163338/…)。此外,针对一个版本进行开发并针对另一个版本进行部署是自找麻烦(尤其是差距如此之大)
  • 可能不是主要问题,但是:您的开发设置显示为config.serve_static_files = true,但您的生产设置显示为config.serve_static_assets = true。我认为应该是serve_static_assets,而不是_files

标签: ruby-on-rails ruby-on-rails-3 configuration asset-pipeline


【解决方案1】:

你可以试试这个:

RAILS_ENV=production bundle exec rake assets:precompile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 2011-12-26
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多