2011-05-24 65 views
13

在Rails 3.1中,Sprockets用於管理資產並將其打包到一個文件中。總的來說,這並不是一個壞主意。Rails 3.1和鏈輪使它更難調試使用螢火蟲?

來自外部來源,手頭解釋這個問題引用:

這種方法的問題是, 它可以使調試困難,如果你 不得不看的「串聯」 CSS 文件在生產中有意義 什麼代碼的包含而不是,它的 更難以知道什麼來自哪裏 比如果你只包含原始的 源代碼文件。

一個解決辦法是有一個方法來「串聯」和 「正常」模式之間 開關容易(也許是 已經成爲可能,我不知道),所以 正常發展會 暢通。但是你必須求助於 這個大連接文件,用於在生產中調試 。

在Rails 3.0.x中,我們的設計人員可以輕鬆地將點使用Firebug的CSS設置,這將直接指示文件和行號,因爲所有的CSS文件是分開的,而不是打包成一個。

還是我錯過了這一點?

+0

刪除我的回答,回去看看一個Rails 3.1應用程序我有,文件被連接在發展,只是沒有壓縮。查看源代碼沒有標誌來禁用這種行爲。也許這可能是值得在Rails的Github問題上創建一張票的東西。我有一個快速搜索,看不到任何類似的東西。 – 2011-05-24 20:45:51

+0

實際上,由於Rails 3.1預計我的默認設置是您應該使用SCSS和CoffeeScript,所以輸出的文件不會與源代碼相同。我記得看到有人爲SCSS和coffeescript創建了一個Firebug插件,不過幾周後。 – 2011-05-24 20:46:50

+0

我認爲這是一個問題。我已經看到Jammit建議作爲Sprockets的替代品,因爲Jammit在開發中提供了單獨的文件。 – 2011-05-24 21:01:36

回答

3

我想在結束時(RC越來越接近/成爲一個版本),你就可以用下面的 config.assets.css_compressor修改config/application.rb =假

但是,ATM,那並不是」噸真的修復它,因爲stylesheet_asset_tag輔助函數是不符合新管道和準確兼容:所有的修改不起作用,所以......

在你application.html.erb視圖,你將有連接的每一個CSS

<%= stylesheet_link_tag "stylesheets/application" %> 
<%= stylesheet_link_tag "stylesheets/foo" %> 
<%= stylesheet_link_tag "stylesheets/bar" %> 

只要你有你的config/application.rbconfig.assets.enabled = true資產的根會(默認)/assets

,你可以啓動一個Rails控制檯(rails c)和p Rails.application.assets地看到,在平均時間配置的屬性。

我同意不是最好的解決方案,但在這一點上(使用RC與穩定版本)是我找到的最佳方式。

UPDATE:邊緣周圍挖API,發現這個::的ActionView助手sprockets_stylesheet_link_tag(http://edgeapi.rubyonrails.org/classes/ActionView/Helpers/SprocketsHelper.html),但它似乎仍然不完整替換stylesheet_link_tag,因爲它不支持:all,並且在函數調用中您仍然需要使用stylesheets/段。據說,它的功能使用前進,所以...

<%= sprockets_stylesheet_link_tag "stylesheets/foo" %> 
0

鏈輪可能會工作只有在生產環境中,就沒有必要開發和測試過程中打包一切成一個文件

13

您還可以使用:

<%= stylesheet_link_tag "application", :debug => Rails.env.development? %> 
<%= javascript_include_tag "application", :debug => Rails.env.development? %> 

文件將不在開發中被連接在一起,但會在其他環境中被連接。

1

您還可以使用:

<%= stylesheet_link_tag "application", :debug =>true%> 
<%= javascript_include_tag "application", :debug => true %> 

它會爲您提供了針對瀏覽器的源

<link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css" /> 
<script src="/assets/jquery.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script> 
<script src="/assets/application.js?body=1" type="text/javascript"></script> 
+0

將其推向開發階段很可能會破壞事情。最好使用@ Sucrenoir的上述方法,只有在開發時纔有效地將調試設置爲真。 – 2013-05-31 16:37:16

5

添加下面的輸出debug_assets =真到要調試任何網址?它將資產分解成它們的部分。沒有它,串聯根據您的環境設置發生。

+0

我認爲這是調試資產的最簡單的解決方案,實際上就是我所做的,而不是修改佈局文件(並且意外地提交調試符號),我更喜歡在URL中使用調試選項,這使得更有意義並且更快 – kalbasit 2011-09-14 17:49:21

1

我發現了一個有趣的問題。如果我預先編譯資產(提交到git),在生產模式下測試,然後回到在同一臺機器上使用開發環境,我看到了這個問題。

即使我回到了開發模式,公共/資產的內容也被緩存起來而不是新的資產內容。因此,這裏是我如何固定它:

rm -rf public/assets