我试图使用命令预编译资产rake assets:precompile RAILS_ENV=production,但我总是得到以下错误.
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/usr/bin/ruby /usr/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
LoadError: cannot load such file -- uglifier
(in /home/cool_tech/cool_tech/app/assets/javascripts/application.js)
/usr/lib/ruby/gems/2.0.0/gems/activesupport-3.2.14/lib/active_support/dependencies.rb:251:in `require'
/usr/lib/ruby/gems/2.0.0/gems/activesupport-3.2.14/lib/active_support/dependencies.rb:251:in `block in require'
/usr/lib/ruby/gems/2.0.0/gems/activesupport-3.2.14/lib/active_support/dependencies.rb:236:in `load_dependency'
/usr/lib/ruby/gems/2.0.0/gems/activesupport-3.2.14/lib/active_support/dependencies.rb:251:in `require'
/usr/lib/ruby/gems/2.0.0/gems/actionpack-3.2.14/lib/sprockets/compressors.rb:31:in `registered_js_compressor'
/usr/lib/ruby/gems/2.0.0/gems/actionpack-3.2.14/lib/sprockets/bootstrap.rb:18:in `block in run' …Run Code Online (Sandbox Code Playgroud) ruby-on-rails precompile ruby-on-rails-3 asset-pipeline ruby-on-rails-3.2
我刚刚开始使用asset_sync gem,我的资产似乎是乱序编译的,Sass文件无法访问其他Sass文件中定义的变量.怎样才是真正帮我缩小的问题是能看到预编译过程中究竟发生了什么事,但双方rake assets:precompile并heroku run rake assets:precompile似乎没有提供详细选项.我得到的是一些更高级别的输出,后跟一个rake aborted!和一个堆栈跟踪.Tailing heroku日志对我没有任何帮助,那么如何在Heroku上获取资产预编译期间发生的更详细的日志呢?
假设我有一个类X,哪个功能需要很多常量表值,比如一个数组A[1024].我有一个f计算其值的重复函数,就像
A[x] = f(A[x - 1]);
Run Code Online (Sandbox Code Playgroud)
假设这A[0]是一个已知常量,因此数组的其余部分也是常量.使用现代C++的功能预先计算这些值的最佳方法是什么,并且没有使用此数组的硬编码值存储文件?我的解决方法是一个const静态虚拟变量:
const bool X::dummy = X::SetupTables();
bool X::SetupTables() {
A[0] = 1;
for (size_t i = 1; i <= A.size(); ++i)
A[i] = f(A[i - 1]);
}
Run Code Online (Sandbox Code Playgroud)
但我相信,这不是最美好的方式.注意:我强调数组相当大,我想避免代码的怪异.
我们正在使用Azure Web服务(而不是Web站点)并在其中运行ASP.Net MVC 5.1应用程序.
当我通过Web部署发布网站时,我可以选择"在发布期间预编译":

当我发布到Azure Web服务时,我无法在任何地方找到此选项.有什么指针吗?
这个想法是预先编译视图,所以首先点击一个视图不会因为动态编译而受到时间的影响.
我看过Razor Generator,但它不适合我们的需求.我见过很少的其他选项,但在发布阶段编译视图对我们的案例最有意义.
UPD: 仅供我参考,我已经尝试了David Ebbo建议的内容 ,但它没有用.
这是Rails 4.2应用程序的app/assets /.

有3个bootstraps js和css文件.部署到生产(ubuntu 12.1)后,资产预编译在服务器上完成(部署在suburi下):
RAILS_ENV=production bundle exec rake assets:precompile RAILS_RELATIVE_URL_ROOT=/mysuburi
Run Code Online (Sandbox Code Playgroud)
这是production.rb:
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_files = false #ENV['RAILS_SERVE_STATIC_FILES'].present?
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.compile = false
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
config.active_record.dump_schema_after_migration = false
Run Code Online (Sandbox Code Playgroud)
以下是负责人application.css.scss:
@import "bootstrap.min.css";
@import "bootstrap-theme.min.css";
@import "simple_form.css.scss";
@import "user_menus.css.scss";
Run Code Online (Sandbox Code Playgroud)
在application.js,它有:
//= require bootstrap.min
Run Code Online (Sandbox Code Playgroud)
以下是lspublic/assets/on production服务器的输出:
application-05cf37813d76c2bd659271403789374cc118f1a4e616ec220969577b79ff6514.css …Run Code Online (Sandbox Code Playgroud) 在我的开发沙箱中
RAILS_ENV=production rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
需要4分钟才能完成.这是正常的吗?在heroku上花费超过10分钟来完成这项工作,有时会超时.有没有办法解决这个问题和/或加快速度?
UPDATE
我分析了编译的CSS和JS阶段
3.7 s js
175 s css
Run Code Online (Sandbox Code Playgroud)
这些数字是通过这里的仪器制作的
----------------------
/Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@gobbq/gems/sprockets-2.1.2/lib/sprockets/processing.rb
----------------------
266 # Assign a compressor to run on `application/javascript` assets.
267 #
268 # The compressor object must respond to `compress` or `compile`.
269 def js_compressor=(compressor)
270 expire_index!
271
272 unregister_bundle_processor 'application/javascript', :js_compressor
273 return unless compressor
274
275 register_bundle_processor 'application/javascript', :js_compressor do |context, data|
276
277 timeit "js" do
278 compressor.compress(data)
279 end
280
281 end
282 end
Run Code Online (Sandbox Code Playgroud)
和
----------------------
/Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@gobbq/gems/sprockets-2.1.2/lib/sprockets/processing.rb
---------------------- …Run Code Online (Sandbox Code Playgroud) 我还没有使用C++ 11,所以我to_string(whatever)自己编写了这些函数.只有在它们不存在时才应编译它们.如果我切换到C++ 11,应该跳过它们.我有这样的事情:
#ifndef to_string
string to_string(int a){
string ret;
stringstream b;
b << a;
b >> ret;
return ret;
}
string to_string(double a){
string ret;
stringstream b;
b << a;
b >> ret;
return ret;
}
#endif
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.这样的事情是可能的,如果是的话,怎么样?
我使用Twitter Bootstrap(不重要但它是第三方 CSS文件).因为它是第三方CSS"库",它应该进入/vendor/assets/stylesheets.到现在为止还挺好.
现在,我想在生产中使用Rails 3.1(.1)资产管道连接一个application.css中的所有CSS,这就是我遇到的问题.
当我运行rake assets:precompile它时,就像宣传的一样.Rake任务在public/assets带有摘要的所有文件夹中创建一些application.css文件.问题是这个文件只包含我的CSS文件中的CSS,/app/assets/stylesheets并完全忽略了我的供应商资产文件夹中的CSS .
有谁知道我在这里想念的内容以及如何告诉Rails将供应商样式表与应用程序一起连接起来?此外,仅包括:
<%= stylesheet_link_tag "application" %>
Run Code Online (Sandbox Code Playgroud)
在视图中(因为我希望最终所有内容都在一个文件中)或者我应该包含每个CSS文件?
我无法将供应商资产编译为根文件.
我希望独立提供以下资源(不与其他资产一起打包):
vendor/gems/neo-viz/app/assets/stylesheets/neo-viz.css.scss
vendor/gems/neo-viz/app/assets/javascripts/neo-viz.js.coffee
vendor/gems/neo-viz/app/assets/javascripts/lib/jQuery/jquery-1.6.1.min.js
vendor/gems/neo-viz/app/assets/javascripts/lib/arbor/arbor.js
Run Code Online (Sandbox Code Playgroud)
使用以下行:
config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css )
Run Code Online (Sandbox Code Playgroud)
只预编译css文件并使其可用.为什么?
此外,在看到这个问题(在Rails中包含带有config.assets.precompile的子目录中的资产)之后,我尝试了:
config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css lib/arbor/arbor.js arbor/arbor.js lib/jQuery/jquery-1.6.1.min.js jQuery/jquery-1.6.1.min.js )
Run Code Online (Sandbox Code Playgroud)
但它没有任何区别.想法?
我有一个Rails 4.2.4(Ruby 2.2.2)应用程序,我通过Cloudfront提供静态资产.
如果Cloudfront提供您不想要的东西,有两种可能性:
但是,当我改变
Rails.application.config.assets.version ='1.0'
至
Rails.application.config.assets.version ='2.0'
(在config/initializers/assets.rb中)
和
删除公共/资产中的所有资产
运行"RAILS_ENV = staging bundle exec rake assets:precompile"
生成相同的文件名!
我发现使application.scss的消化文件无效的唯一方法是添加一些虚拟内容以激发新的md5校验和.
我究竟做错了什么?
不应该新的assets.version改变消化的文件名吗?
最诚挚的问候和感谢!
precompile ×10
assets ×2
c++ ×2
c++11 ×2
asp.net-mvc ×1
azure ×1
c++17 ×1
constexpr ×1
deployment ×1
function ×1
heroku ×1
logging ×1
methods ×1
performance ×1
publishing ×1
version ×1