【发布时间】: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