gpt4 book ai didi

ruby-on-rails - 使用 Rails 预编译附加 Assets

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:42 24 4
gpt4 key购买 nike

我一直在将一个项目转换为使用 Assets 管道,但在部署的一部分中遇到了瓶颈。在 cap 部署到生产服务器后,我收到以下错误。 (在没有预编译 Assets 的情况下,在开发模式下一切正常)

simile-ajax-api.js isn't precompiled

项目结构是这样的

|-app/
|-assets/
|-javascripts/
|- application.js
|-vendor/
|-assets/
|-javascripts/
|-timeline/
|-timeline_ajax/
|-simile-ajax-api.js

在我的 application.rb 中,我添加了以下行

config.assets.paths << "vendor/assets/timeline/timeline_ajax"

在我的 production.rb 中,我添加了

  precompile_list = %w(app lib vendor).map do |path|
Dir[Rails.root.join(*%W(#{path} assets ** *))].select do |f|
f =~ /(\.js|\.s?css)/
end
end.flatten.map do |f|
f.split(File::SEPARATOR).last
end.uniq
config.assets.precompile = (config.assets.precompile + precompile_list).uniq
config.assets.precompile << Rails.root.join(*%w( vendor assets timeline timeline_ajax simile-ajax-api.js ))

application.js 看起来像这样:

// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require global
//= require_tree ../../../vendor/assets/timeline/timeline_ajax/.
//= require_tree ../../../vendor/assets/timeline/timeline_js/.
//= require timeline-api
//= require jquery.dataTables.min
//= require FixedHeader.min
//= require ColVis.min
//= require jquery.ba-resize.min
//= require jquery-ui
//= require jquery.blockUI
//= require jquery-ui-timepicker-addon
//= require autocomplete-rails
//= require_tree ../../../vendor/assets/javascripts/.
//= require_tree .

最后,它在 application.html.haml 中的加载位置是

%html
%head
- page_title = @page_title ? "#{@page_title}" : ''
%title= strip_tags page_title

:javascript
Timeline_ajax_url= "#{asset_path('simile-ajax-api.js')}";
Timeline_urlPrefix= '/assets/';
Timeline_parameters='bundle=true'

知道我哪里出错了吗?如果您需要更多详细信息,请告诉我。

最佳答案

我认为没有必要像这样声明路径:

//= require_tree ../../../vendor/assets/timeline/timeline_ajax/.

只是:

//= require_tree timeline/timeline_ajax/.

因为所有 Assets (无论位于何处)都以相同的方式查找。简单地说——如果目录名为 assets,管道将查找要包含的文件。

编辑:因为您的 vendor 目录结构似乎有点奇怪:通常您将 .js 文件直接复制到 assets/javascripts目录 。我认为包括 assets/vendor/timeline 会使事情变得复杂。只需将 timeline 目录复制到 vendor/assets/javascripts 即可。

关于ruby-on-rails - 使用 Rails 预编译附加 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com