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