Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Precompiling additional assets with Rails

I've been converting a project to use the asset pipeline, but am hitting a wall with one part of the deployment. I have getting the below error after a cap deploy to a production server. (Everything work's ok in development mode without the precompilation of assets)

simile-ajax-api.js isn't precompiled

the project structure is something like

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

In my application.rb I have added the following line

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

and in my production.rb, I have added

  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 ))

The application.js looks like this:

// 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 .

and finally, the bit where it is getting loaded in application.html.haml is

%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'

Any idea's where I'm going wrong? Please let me know if there are more details you need.

like image 929
Irfy Avatar asked Mar 18 '26 04:03

Irfy


1 Answers

I think there is no need to state the path like this :

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

Just :

//= require_tree timeline/timeline_ajax/.

Because all the assets (no matter where are located ) are looked up the same way . Simply put - if the dir is named assets , the pipeline looks up for files to be included .

EDIT : As it seems your vendor directory structure is a little strange : normally you copy your .js files directly to assets/javascripts directory . I think including assets/vendor/timeline is going to make things complicated . Just copy timeline dir into vendor/assets/javascripts.

like image 126
R Milushev Avatar answered Mar 19 '26 20:03

R Milushev



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!