2014-04-26 57 views
0

(我是新既導軌等,這樣的藉口,如果我不這樣做是正確的)如何有效地組織供應商CSS和JS在軌資產togheter文件

我試圖適應定期第三-party web模板在我的rails 4應用程序中。我有一個廠商文件夾與其他文件和子文件夾像bootstrap.jsNIVO滑塊同位素同時包含.css和.js文件。

所以我感動了所有文件和子文件夾vendor/assets並列入我的application.js//= require_tree ../../../vendor/assets/,建議here。所以,我的application.js看起來像

//= require jquery 
//= require jquery_ujs 
//= require twitter/bootstrap 
//= require turbolinks 
//= require_tree ../../../vendor/assets/ 
//= require_tree . 

在我佈局文件:

<%=stylesheet_link_tag "application.css" -%> 
<%=javascript_include_tag "application" -%> 

當我執行它在我的服務器我得到鏈輪:: FileOutsidePaths例外:

Showing /home/valle/RoR/grifo/app/views/layouts/application.html.erb where line #25 raised: /home/valle/RoR/grifo/vendor/assets/bootstrap.js isn't in paths: /home/valle/RoR/grifo/app/assets/images, /home/valle/RoR/grifo/app/assets/javascripts, /home/valle/RoR/grifo/app/assets/stylesheets, /home/valle/RoR/grifo/lib/assets/circle-flip-slideshow, /home/valle/RoR/grifo/lib/assets/isotope, /home/valle/RoR/grifo/lib/assets/javascripts, /home/valle/RoR/grifo/lib/assets/jflickrfeed, /home/valle/RoR/grifo/lib/assets/magnific-popup, /home/valle/RoR/grifo/lib/assets/mediaelement, /home/valle/RoR/grifo/lib/assets/nivo-slider, /home/valle/RoR/grifo/lib/assets/owl-carousel, /home/valle/RoR/grifo/lib/assets/rs-plugin, /home/valle/RoR/grifo/lib/assets/stylesheets, /home/valle/RoR/grifo/lib/assets/twitterjs, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/modernizr-rails-2.7.1/vendor/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/turbolinks-2.2.2/lib/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/jquery-rails-3.1.0/vendor/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/gems/coffee-rails-4.0.1/lib/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/fonts, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/images, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/javascripts, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/app/assets/stylesheets, /home/valle/.rvm/gems/ruby-1.9.3-p392/bundler/gems/twitter-bootstrap-rails-663760e67b80/vendor/assets/stylesheets

我以爲Sprockets會把所有的js或css文件在所有資產文件夾中,預編譯,統一和縮小它們,但現在看來我需要指定路徑。我怎麼解決它? 此外,它是一個問題沒有在供應商分開的JavaScript和CSS文件夾?

回答

2

in rails 4他們已經刪除了vendor文件夾,所以資產將不會從供應商處獲得服務器。

Rails.application.config.assets.paths

不包含vendor,如果你想你必須添加像

在配置

路徑/ application.rb中

config.assets.paths << "#{Rails.root}/vendor/assets" 
+0

它工作。 – Jenorish

+0

感謝您的回答,併爲最近的回覆感到抱歉。它似乎像一個魅力。 儘管如此,供應商文件夾確實存在(至少在rails 4.1.0中),我不明白爲什麼它會從Rails.application.config.assets.paths中刪除。我不應該使用'vendor/folders'嗎?那麼使用我的第三方文件的正確選擇是什麼? –

+0

由於版本4供應商和lib目錄默認情況下不包含在資產管道中。如果您想要,那麼您應該擴展資產路徑或使用'app/assets'文件夾。如果我的答案有幫助,請接受我的答案。 – Jenorish

0

更新的application.js文件

//= require jquery 
//= require jquery_ujs 
//= require twitter/bootstrap 
//= require turbolinks 
//= require_tree . 
//= require otherJsFiles 

而且在application.css文件需要其他CSS文件

*= require otherCssFiles 

要求中的application.js每個JS和CSS文件, application.css文件置於供應商/資產

+0

感謝您的回答。這個解決方案似乎可行,但我沒有測試它。要求每個文件似乎非常繁瑣,並不像Rails風格。它讓我懷疑Rails資產管道是否值得使用,而不是直接在我的HTML代碼中使用常規調用文件。 此外,我不明白爲什麼'vendor/assets'作爲內置文件夾存在。 –

+0

vendor/assets文件夾用於添加派對CSS和JavaScript文件。供應商/資產適用於外部實體擁有的資產,例如JavaScript插件和CSS框架的代碼。它在軌道3.2 –