I am trying to run a ruby script from my rails controller.
The script runs successfully when the rails server is started normally as

     rails s thin -e development 

But when rails server is started as a daemon, the ruby script fails to run.

     rails s thin -e development -d

Inside the controller the ruby script is run with  the **exec** command.

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



The above approach kills the rails server and doesn't execute the ruby 
script. And hence I used

     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}'")

The above **%x** and **system** approaches also fail when run rails server 
is started with -d. But it does work when the rails server is normally.


Hence I tried a different approach of using **Daemons**
In my controller 


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

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

The Spreadsheet_proper_control.rb has the 

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

       
This approach too fails. Upon logging false value is returned for the above 
approach.

But when run manually from the terminal, the above Daemon approach is 
working perfectly. 

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


The ruby script runs while I am logged into a terminal session and started 
rails server normally – should that terminal session end so would the 
server. 

Concise app environment:-

 - Ubuntu 14.04
 - Rails version 4.2
 - Ruby 2.2.2
 - daemons (1.2.3)

The Spreadsheet_proper.rb generates an xls file which is then zipped and 
sent as response by the controller.


Since the output of the ruby script is sent by controller as a response, I 
couldn't go for delayed job.

Is there any other approach to run a Ruby script inside Rails controller 
successfully without the Rails server getting killed when started as daemon?


 

 

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/da52bb49-b410-4f97-a711-63c94a0d99fb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to