Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails方法中使用Shell命令切换服务/任务_Ruby On Rails_Ruby On Rails 3_Shell_Service_System - Fatal编程技术网

Ruby on rails 在Rails方法中使用Shell命令切换服务/任务

Ruby on rails 在Rails方法中使用Shell命令切换服务/任务,ruby-on-rails,ruby-on-rails-3,shell,service,system,Ruby On Rails,Ruby On Rails 3,Shell,Service,System,我的控制器中有一个由Rails应用程序中的链接触发的方法。一切都在开发模式下完美工作,但不管出于什么原因,它在生产模式下都不工作。无论何时我调用其中一个命令,它都会像试图做某事一样转动齿轮,但实际上从未做过任何事情。然而,奇怪的是,太阳黑子的重新指数确实起作用。我正在查看我的生产日志并监视每个服务创建的PID文件。此外,如果我在SSH终端会话中正常运行这些命令,它们也可以正常工作 def toggle_service command = params[:string].to_s

我的控制器中有一个由Rails应用程序中的链接触发的方法。一切都在开发模式下完美工作,但不管出于什么原因,它在生产模式下都不工作。无论何时我调用其中一个命令,它都会像试图做某事一样转动齿轮,但实际上从未做过任何事情。然而,奇怪的是,太阳黑子的重新指数确实起作用。我正在查看我的生产日志并监视每个服务创建的PID文件。此外,如果我在SSH终端会话中正常运行这些命令,它们也可以正常工作

  def toggle_service
    command = params[:string].to_s
    if command == 'stop_mailman_server'
      system("ruby #{::Rails.root}/script/mailman_daemon.rb stop")
    elsif  command == 'start_mailman_server'
      system("ruby #{::Rails.root}/script/mailman_daemon.rb start")
    elsif  command == 'start_search_server'
      system("rake sunspot:solr:start RAILS_ENV=#{Rails.env}")
    elsif  command == 'stop_search_server'
      system("rake sunspot:solr:stop RAILS_ENV=#{Rails.env}")
    elsif  command == 'reindex_search_server'
      system("rake sunspot:reindex RAILS_ENV=#{Rails.env}")
    end    
    redirect_to :back
  end

我解决了这个问题。在mailman和sunspot solr两种情况下,我的生产环境都需要对创建文件的pid文件夹进行写访问。当我在终端中运行启动/停止服务的命令时,该命令起作用,但必须将该文件夹的权限提升到rails/apache用户。

只是为了代码改进:使用案例,而不是if/elsif和符号:)