2

我想運行Rails應用程序內的資產預編譯的任務,因爲我有很多依賴誰將會更改代碼,在這種情況下,所有每當他們改變,我需要爲我不能運行腳本的時間給他們服務器的訪問,所以我爲他們提供了GUI從他們本身並運行該腳本,所以,我已經建立的用戶界面來運行一些參數的任務,像運行rake任務裏面的Rails應用程序

system("Template='#{params[:template]}' Theme='#{params[:theme]}' rake assets:precompile) 

我正在從UI兩個值(PARAMS [:模板],則params [:主題])。我想運行其他路徑(站點路徑)這個任務的另一件事是指管理員端UI是有這個任務應該在網站目錄下執行,

if(params[:theme_script] == "true") 
     template=Template.where(:name => params[:template]).first 
    if template 
     theme = template.themes.where(:name => params[:theme]).first 
     if theme 
    # Dir.chdir "#{THEMEPATH}"do 
    #  `Template="#{template.name}" Theme="#{theme.name}" rake assets:precompile` 
    # end 
    #  sleep 10 
    #  system("#{Rails.root.to_s}/lib/shell_script.sh") 
    #  RunRake.run_rake(template.name,theme.name) 
    # Dir.chdir "#{THEMEPATH}"do 
    #  Rake::Task['assets:precompile'].invoke 
    # end 
      ENV["Template"] = template.name 
      ENV["Theme"] = theme.name 
      precompile_task = "bundle exec rake assets:precompile --trace 2>&1" 
      output = Dir.chdir(THEMEPATH) { %x[ #{precompile_task} ] } 
      flash[:notice] = "Asset created successfully" 
     else 
     flash[:notice] = "U have enter invalid data" 
     end 
    else 
     flash[:notice] = "U have enter invalid data" 
    end 
    end 

這是我的代碼我檢查多個條件,允許我執行任務。

我試圖通過把在控制器和lib這個代碼,但是這是行不通的。

我也試過用shell腳本。

請任何人都可以幫助我。

+0

這是*真的*不是如何使用資產編譯。您應該在部署時通過構建腳本自動執行此操作,而不是手動執行此操作。應該沒有理由爲此需要GUI。 – meagar

+0

感謝您的答覆,因爲我有很多依賴誰時,他們改變我需要運行腳本,我不能給他們的服務器訪問 所以我從提供GUI爲他們所有的時間會更改代碼,在這種情況下,只有他們可以運行腳本。 – Jenorish

+0

@МалъСкрылевъ請幫助我如何傳遞參數? – Jenorish

回答

5

您可以只設置爲的環境變量,然後發出從控制器#invoke方法。所以,準備文件:

gem 'rake' 

配置/初始化/ rake.rb:

Rake.load_rakefile Rails.root.join('Rakefile') 

應用程序/控制器/ your_controller:

ENV["Template"] = template.name 
ENV["Theme"] = theme.name 
Rake::Task[ 'assets:precompile' ].invoke 

問題bundle install,然後運行控制檯rails c,然後鍵入:

Rake::Task.tasks.map(&:name).grep 'assets:precompile' 
# => ["assets:precompile"] 

正如你所看到的,assets:precompile成功加載任務。然後發出控制器的動作。

要爲其他應用程序,你外殼也運行其他情況下,類似的運行任務,你做了:

system("other_app_run.sh '#{template.name}' '${theme.name}'") 

other_app_run.sh:

#!/bin/bash 

source "$HOME/.rvm/scripts/rvm" 
cd /other/app/path 
export Template="$1" 
export Theme="$2" 
rake assets:precompile 
+0

我編輯了我的問題併發布了我的代碼,我如何嘗試。請確認並幫助我。 – Jenorish

+0

@Kingston好,問題是一樣的,調用發生了什麼? –

+0

我有這麼多的錯誤命令失敗狀態(1):[/home/kingston/.rvm/rubies/ruby-1.9.3-p448/...], 應用程序已被初始化。, SystemExit發生在翻譯中#excelcute:exit ,, .... 未定義的方法'each_logical_path'爲零:NilClass 在管理端我沒有使用資產concept.so config.assets.enabled = false是there.i認爲該目錄是沒有改變。 – Jenorish

相關問題