2

Я хочу запустить задачу прекомпиляции ресурсов внутри приложения rails, так как у меня было много зависимостей, которые изменят код, в этом случае все время, когда они меняются, мне нужно запустить скрипт, поскольку я не могу предоставить серверу доступ к ним, так что я, обеспечивающий графический интерфейс для них от этого только они могут запустить скрипт, так что, я построил пользовательский интерфейс для выполнения задачи с некоторым параметром, какrun rake task in rails application

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

я получаю два значения из пользовательского интерфейса (params [: template], params [: theme]). Еще одна вещь, которую я хочу запустить эту задачу на другом пути (путь к сайту), означает, что пользовательский интерфейс стороны администратора должен выполнять эту задачу в каталоге сайта,

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, но это не работает.

Я также попытался с помощью скрипта оболочки.

Может ли кто-нибудь помочь мне.

+0

Это * действительно * не то, как предполагается использовать компиляцию активов. Вы должны делать это автоматически во время развертывания через скрипт сборки, а не вручную. Для этого не должно быть причин, по которым вам нужен графический интерфейс. – meagar

+0

Спасибо за ответ. Поскольку у меня было много зависимостей, которые изменят код, в этом случае все время, когда они меняются, мне нужно запустить скрипт, поскольку я не могу предоставить ему доступ к ним , поэтому я предоставляю им графический интерфейс от что они сами могут запустить скрипт. – 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 

Issue bundle install, а затем запустить консоль rails c и тип:

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

Как вы можете видеть, задачи assets:precompile загружен успешно. Затем просто выполните действие для контроллера.

Чтобы запустить задачу для другой приложения вы SHELL запустить также другой экземпляр, подобно тому, как вы сделали:

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

@ Кингстон хорошо, вопрос такой же, что происходит с вызовом? –

+0

У меня так много ошибок Ошибка команды со статусом (1): [/home/kingston/.rvm/rubies/ruby-1.9.3-p448/...], Приложение уже инициализировано., Произошел сбой SystemExit в переводах # excecute: exit ,, .... undefined method 'each_logical_path 'для nil: NilClass в стороне администратора я не использовал ресурс concept.so config.assets.enabled = false is there.i думаю, что каталог не меняется. – Jenorish

 Смежные вопросы

  • Нет связанных вопросов^_^