2012-02-18 119 views
1

生產服務器上的預編譯資產非常緩慢。所以我決定在開發機器上重新編譯它們,並通過jammit將資源上傳到Amazon S3。一切都這樣做,但我有一些負面問題:開發/生產模式中的Rails 3和資產管道

  1. 我必須包括public/assets目錄git控制。因爲如果public/assets生產服務器上的目錄爲空
  2. 如果我在開發機器上預編譯資產application.js包含在HTML中作爲壓縮方式,那樣我就複製了js代碼。由於預編譯的application.js會中斷此代碼,因此更改js不會產生任何效果。

這樣,我的開發過程,包括以下步驟:

  1. 刪除預編譯的資產,如果我要去改變JS或CSS
  2. 做一些改變
  3. 預編譯資產
  4. 上傳資產到S3通過jammit-s3
  5. 提交併推送我的更改包括資產到git服務器
  6. 部署由Capistrano的

我的問題是:

  1. 是否有可能配置開發環境不包括壓縮application.js,如果我有它在public/assets目錄?
  2. 是否可以將生產環境配置爲使用空的public/assets目錄?資產只會在S3服務器上。

回答

1

我解決了這個問題,方法是在gitignore中包含資產目錄並僅排除一個文件 - public/assets/manifest.yml和生產服務器現在可以正常工作,即config.action_controller.asset_host = "http://assets.example.com"有效。它只需要manifest.yml文件

2

對於問題一,我不知道的比跑步之外的永久解決方案:

bundle exec rake assets:clean 

切換回開發模式之前。如果不關閉整個資產管道,我可能會忽視開發中的資產。

在production.rb有你的第二個問題的選項:

# Enable serving of images, stylesheets, and JavaScripts from an asset server 
config.action_controller.asset_host = "http://assets.example.com" 

那麼它應該忽略你的資產目錄,因爲它依賴於遠程主機上。 希望有所幫助。

+0

如果生產模式已經設置了'config.action_controller.asset_host',但是我必須在'public/assets'路徑中預先編譯資源,因爲服務器沒有它們就會失敗 – ka8725 2012-02-18 13:50:05

+0

您可能想嘗試一些不同的設置以及那麼。你可以發佈你的production.rb,因爲很難說出你做了什麼,不知道什麼。 儘量減少Rails對資產的使用,例如: 'config.assets.compile = false' 所以它不會嘗試生成它們。 – tombruijn 2012-02-19 13:03:19

+0

另外,服務器如何失敗?它不註冊遠程asset_host並檢查公共/資產目錄?然後它是從應用程序還是asset_host實際提供它們? – tombruijn 2012-02-19 13:10:00