0

我需要在本地計算機上預編譯資源,並在使用資源預編譯的capistrano進行部署之後。用於本地預編譯資產的自定義rake任務rails 3.2.8

我已經加入到development.rb

config.assets.prefix = "/dev-assets" 

也,我已經加入到application.rb

config.assets.initialize_on_precompile = false 

除了手動執行rake assets:precompile,我想使從自動化Capistrano的文件,清理資產,上傳此過程...等等。我曾嘗試與此自定義任務

namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     from = source.next_revision(current_revision) 
     if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0 
     run_locally "bundle exec rake assets:precompile" 
     run_locally "rsync -zvrh --progress -e 'ssh -i #{ssh_options[:keys][0]}' public/assets #{user}{server}:#{shared_path}" 
     puts "cleaning up locally compiled assets" 
     run_locally "bundle exec rake assets:clean" 
     else 
     puts "Skipping asset pre-compilation because there were no asset changes" 
     end 
    end 
    end 

但我得到一個錯誤:

/config/deploy.rb:73:in `block (3 levels) in load': undefined method `[]' for nil:NilClass (NoMethodError) 

我怎麼能預編譯本地和上傳與Capistrano的後資產?

回答

2

的問題是固定的:

這是我的自定義任務工作正常:

namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     from = source.next_revision(current_revision) 
     if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0 
     run_locally("rm -rf public/assets/*") 
     run_locally "bundle exec rake assets:precompile" 
     find_servers_for_task(current_task).each do |server| 
     run_locally "rsync -vr --exclude='.DS_Store' public/assets #{user}@#{server.host}:#{shared_path}/" 
     end 
     else 
     puts.info "Skipping asset pre-compilation because there were no asset changes" 
     end 
    end 
    end 
0

它看起來像logger.infoelse塊是問題。

如果你需要由於其他原因,在Capistrano的記錄器,你可能需要手動初始化它,因爲你沒有真正在服務器上運行。但它可能會更容易只是打印到控制檯(當您與您的其他消息做上述

更換

logger.info "Skipping ..." 

puts "Skipping ..." 
+0

謝謝,但我編輯了這個問題,錯誤不同的是其他錯誤。謝謝! – hyperrjas

+0

你能給出更多關於錯誤的背景嗎?顯然你的deploy.rb腳本試圖訪問那些不存在的東西(比如也許是一個環境散列?)你的部署腳本在謊言的周圍是什麼樣子的? –

+0

我修復了錯誤。修復是在下一個答覆。非常感謝你! – hyperrjas