从Rails控制器运行Ruby脚本会导致rails服务器崩溃

时间:2015-10-13 11:05:58

标签: ruby-on-rails ruby linux daemon

我正在尝试从我的rails控制器运行ruby脚本。 当rails服务器正常启动时,脚本成功运行

 rails s thin -e development 

但是当rails服务器作为守护进程启动时,ruby脚本无法运行。

 rails s thin -e development -d

在控制器内部,使用 exec 命令运行ruby脚本。

 script_exec = exec("ruby /Code/AttendanceReport/attn/bin/scripts/Spreadsheet_proper.rb '#{city}' '#{date1}' '#{date2}'")

上述方法会杀死rails服务器并且不会执行ruby脚本。因此我用了

 script_exec = %x{ruby /Code/AttendanceReport/attn/bin/scripts/Spreadsheet_proper.rb '#{city}' '#{date1}' '#{date2}' }

      script_exec = system("ruby /Code/AttendanceReport/attn/bin/scripts/Spreadsheet_proper.rb '#{city}' '#{date1}' '#{date2}'")

当使用-d启动run rails服务器时,上述%x 系统方法也会失败。但是当rails服务器正常时它确实有效。

因此,我尝试了使用守护进程的不同方法 在我的控制器中

file_path1 = "/Code/AttendanceReport/attn/bin/scripts/Spreadsheet_proper_control.rb"

script_exec = %x{ruby #{file_path1} start -- #{city} #{date1} #{date2}}

Spreadsheet_proper_control.rb具有

 require 'daemons'
 Daemons.run('/Code/AttendanceReport/attn/bin/scripts/Spreadsheet_proper.rb')

这种方法也失败了。在记录时,返回上述方法的假值。

但是当从终端手动运行时,上面的守护进程正在完美运行。

 ruby Spreadsheet_proper_control.rb start -- 'Melbourne' '2015-06-01' '2015-10-01'

当我登录终端会话并且正常启动rails服务器时,ruby脚本会运行 - 终端会话是否应该结束服务器。

简洁的应用环境: -

  • Ubuntu 14.04
  • Rails版本4.2
  • Ruby 2.2.2
  • 守护进程(1.2.3)

Spreadsheet_proper.rb会生成一个xls文件,然后将其压缩并作为控制器的响应发送。

创建并写入Excel工作表的ruby代码中的行。

 excel_file = Spreadsheet::Workbook.new     
 sheet1 = excel_file.create_worksheet :name => 'Melbourne Attendance'

 #some code here

 excel_file.write("/Code/AttendanceReport/attn/files/excel/Attendance-#{Time.now}.xls")

由于ruby脚本的输出由控制器作为响应发送,我不能用于延迟工作。

有没有其他方法在Rails控制器内部成功运行Ruby脚本,而Rails服务器在作为守护进程启动时会被杀死?

更新: -

在使用rails logger进行调试时,我发现当使用-d标志启动rails服务器并且使用 system 运行脚本时,控制器正在运行ruby脚本STRONG>。但该文件不是由ruby脚本创建的(即仅使用以-d开头的rails服务器)

登录开发环境后的错误消息是

Errno::ENOENT (No such file or directory @ rb_file_s_lstat - /Code/AttendanceReport/attn/files/excel/Attendance-Melbourne-16:47:24.xls):

0 个答案:

没有答案