12

我有點困惑,把Galleria這樣的jQuery框架放在Rails 3.1的新版本資產管道Rails 3.1 Asset Pipeline中放置Galleria(jQuery圖像庫框架)的位置?

我知道,從技術上講,應該進入/vendors/assets/javascripts,這是我的理解是,該Galleria文件夾jQuery的&主題,希望在活動網站的根目錄(/galleria)中才能正常工作。

此外,雖然我們在它,哪裏把下面的腳本,所以它只會出現在畫廊的頁面上?

<script> 
    $('#gallery').galleria({ 
     width:500, 
     height:500 
    }); 
</script> 

編輯:驚奇的沒有反應!?!也許Galleria不那麼受歡迎?這些是我試圖加載的文件。他們被捆綁像這樣的,雖然我可以很容易地移動:

vendor/ 
    assets/ 
    javascripts/ 
     galleria-1.2.5.js 
     galleria-1.2.5.min.js 
    galleria/ 
     themes/ 
     classic/ 
      classic-loader.gif 
      classic-map.png 
      galleria.classic.css 
      galleria.classic.js 
      galleria.classic.min.js 

我想鏈輪require_tree .將在app/assetslib/assetsvendor/assets加載一切?!?

+0

好問題全能。對不起,我不知道他們的答案。 – Andrew

回答

2

我也偶然發現了這個問題。劃分現有的庫以適應當前的javascripts/stylesheets結構是一件麻煩事。因此,你可以添加一個額外的路徑,你的application.rb中的文件,從加載的資產,像這樣:

# Enable the asset pipeline 
    config.assets.enabled = true 
    config.assets.paths << "#{Rails.root}/app/assets/libs" 

下創建應用程序/資產「庫」文件夾,在廣場庫複製到這個文件夾,這增加你的應用程序佈局文件:

<%= javascript_include_tag 'galleria/galleria-1.2.4.min.js' %> 
    <%= javascript_include_tag 'galleria/themes/classic/galleria.classic.min.js' %> 

您也可以通過要求js文件捆綁了廣場的代碼,但是這取決於你。

22

我有同樣的問題,並花了一段時間才能工作。最初,它在開發上可以很好地工作,但是當我們轉向生產時,由於資產文件名現在具有「指紋」,因此Galleria悄無聲息地失敗了。這似乎也是jQuery UI主題和許多其他此類腳本的問題。

當然,你可以回到舊的方式做事情,並把所有東西都放在「公開」中,但我們希望自動合併所有css/js文件,並以軌道方式做事。

這是我如何得到它的工作:

vendor/ 
    assets/ 
    images/ 
     classic-loader.gif 
     classic-map.gif 
    javascripts/ 
     galleria-1.2.5.js 
     galleria.classic.js 
    stylesheets 
     galleria.classic.css.scss 

重命名galleria.classic.css文件galleria.classic.css.scss。然後更換圖像引用,像這樣(我有兩個):

url("classic-loader.gif")成爲image-url("classic-loader.gif")

更新:看起來你並不需要爲此在Rails的3.1.1。只需將該文件重命名爲.css.scss,rails就會自動爲您預處理url()調用。

在你app/assets/javascripts/application.js文件,請確保您有行

//= require galleria-1.2.5 
//= require galleria.classic 
//= require_tree . 

在你app/assets/stylesheets/application.css文件時,請確保您有行

*= require galleria.classic 
*= require_tree . 

最後,廣場似乎有一些奇特的非內置標準css加載。這是防止Galleria在我們的生產網站上加載的原因。既然我們已經包含了樣式表,我們想要禁用這種行爲。只需打開galleria.classic.js(或您的廣場主題javascript文件),並更換線路:

css: 'galleria.classic.css', 

有:

css: false, 

這將告訴拱廊不要嘗試加載樣式表。

還有一件事 - 當試圖編譯這些資產時,我碰到了顯然是bug in Rails 3.1.0。當我跑rake assets:precompile,我喜歡的錯誤:

$ bundle exec rake assets:precompile 
rake aborted! 
classic-loader.gif isn't precompiled 
    (in /vendor/assets/stylesheets/galleria.classic.css.scss) 

長話短說,你需要設置這一行config/environments/production.rb

config.assets.compile = true 

一次3.1.1發佈這不應該是必要的。

+2

我不喜歡更改庫代碼,即將'url(...)'更改爲'image-url(...)'。我會盡量讓他們留在公用文件夾中。 – crispy

+0

既不是,但似乎更改庫代碼是獲得Rails 3.1資產管道的真棒優勢的唯一方法。 –

+0

樣式表中引用的圖像是否有任何令人敬畏的好處?指紋...? – crispy

3

我喜歡Arjen的建議,但我認爲vendor/assets/libs更合適。這裏是我的設置:

在配置/ application.rb中

config.assets.enabled = true 
config.assets.paths << "#{Rails.root}/vendor/assets/libs" 

在應用程序/資產/ Java腳本/ application.js中

//= require galleria/galleria-1.2.6.min.js

初始化:

Galleria.loadTheme('assets/galleria/themes/classic/galleria.classic.min.js'); 
$('#gallery').galleria(); 

注意傳遞給loadTheme()的路徑是如何以'a。開始的ssets'。

我喜歡這個設置,因爲它保持galleria文件夾完好無損。另外,它將galleria-1.2.6.min.js連接到我的主js文件(少一個http請求)。

+0

我也試過這個解決方案,但是在開發中有什麼作用會影響生產。我可以嘗試loadTheme('assets/gall ...')或loadTheme('/ assets/gall ...')等等,它不會找到主題。我得到的只是:致命錯誤:資產/主題/主題/經典/ galleria.classic.min.js無法加載主題,請檢查主題路徑 –

+0

@KarstenS。我建議的設置適用於所有生產級別。嘗試尋找您的開發和產品之間的差異,特別是在您的資產管道配置中。 –