From: david Date: 2008-04-24T04:15:06+09:00 Subject: Re: win32-service-0.6.1 using a Rails Model On Apr 19, 4:28 pm, Gordon Thiesfeld wrote: > On Sat, Apr 19, 2008 at 11:30 AM, david wrote: > > Windows 2000 SP4 > > Ruby 1.8.6 > > Rail 1.2.6 > > > I'm trying to create a Rail application for our internal use to > > provide a one stop access to services. I'm currently trying to get the > > Server.status, Service.stop and Service.start to work through a model > > inRails. The Service.* functions work well through Ruby itself, but > > seems to have problem through aRailsModel. I've been trying to > > display the status of the MySQL service. > > > *** Model > > > require "win32/service" > > > class Servicectl > > > include Win32 > > > attr_reader :state > > > def servicestatus(service_name, host_name) > > @state = Service.status(service_name, host_name) > > end > > > def servicestart(service_name, host_name) > > Service.start(service_name, host_name) > > end > > > def servicestop(service_name, host_name) > > Service.stop(service_name, host_name) > > end > > > end > > > *** Controller > > > class ServicectlController < ApplicationController > > > def show > > service_state = Servicectl.new > > service_state.servicestatus("MySQL",nil) > > @status = service_state.state > > end > > > end > > > *** Show View > > > <%= @status %> > > > The following error is posted to the development.log. > > > Processing ServicectlController#show (for 127.0.0.1 at 2008-04-19 > > 11:53:46) [GET] > > Session ID: d446bf0a6cad825dbf5d1a78e6853706 > > Parameters: {"action"=>"show", "controller"=>"servicectl"} > > > Win32::Service::Error (T): > > c:/ruby/lib/ruby/gems/1.8/gems/win32-service-0.6.1-x86-mswin32-60/ > > lib/win32/service.rb:920:in `status' > > C:/Shared/SourceCode/Rails/sandbox/app/models/servicectl.rb:14:in > > `servicestatus' > > C:/Shared/SourceCode/Rails/sandbox/app/controllers/ > > servicectl_controller.rb:9:in `show' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/base.rb:1101:in `send' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/base.rb:1101:in `perform_action_without_filters' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/filters.rb:696:in `call_filters' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/filters.rb:688:in `perform_action_without_benchmark' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/benchmarking.rb:66:in > > `perform_action_without_rescue' > > c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/benchmarking.rb:66:in > > `perform_action_without_rescue' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/rescue.rb:83:in `perform_action' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/base.rb:435:in `send' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/base.rb:435:in `process_without_filters' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/filters.rb:684:in > > `process_without_session_management_support' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/session_management.rb:114:in `process' > > c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ > > action_controller/base.rb:334:in `process' > > c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/dispatcher.rb:41:in > > `dispatch' > > c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb: > > 113:in `handle_dispatch' > > c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb: > > 79:in `service' > > c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' > > c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start' > > c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start' > > c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb: > > 63:in `dispatch' > > c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/servers/ > > webrick.rb:59 > > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in > > `gem_original_require' > > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in > > `require' > > c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/ > > active_support/dependencies.rb:495:in `require' > > c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/ > > active_support/dependencies.rb:342:in `new_constants_in' > > c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/ > > active_support/dependencies.rb:495:in `require' > > c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/server.rb: > > 39 > > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in > > `gem_original_require' > > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in > > `require' > > script/server:3 > > > I have no idea why it is failing, I'm hoping someone might have a clue > > for me. > > > For reference this is the working code which works well though Ruby > > itself. > > > *** service.rb > > > require "win32/service" > > > class ServiceController > > > include Win32 > > > attr_accessor :state > > > def status(service_name, host_name) > > @state = Service.status(service_name, host_name) > > end > > > def start(service_name, host_name) > > Service.start(service_name, host_name) > > end > > > def stop(service_name, host_name) > > Service.stop(service_name, host_name) > > end > > > end > > > *** Output: > > > C:\Shared\SourceCode\Ruby>ruby service.rb > > running > > > Thanks for all your time, > > Dave > > I can't offer help with win32-service, but I could suggest an > alternative. You could do what you're wanting to do with Windows > services via WMI, and I've written a ruby-wmi gem that has a syntax > similar to Activerecord. Myrailsis rusty, but here's an idea. > > *** Model > > #nothing in here. ;) > > *** Controller > > require 'ruby-wmi' > > class ServicesController < ApplicationController > # GET /services > # GET /services.xml > def index > @services = WMI::Win32_Service.find(:all) > > respond_to do |format| > format.html # index.html.erb > format.xml { render :xml => @services } > end > end > > # GET /services/1 > # GET /services/1.xml > def show > puts params > service = WMI::Win32_Service.find(:first, :conditions => {:name => > params['id']}) > @status = service.state > end > > def stop > service = WMI::Win32_Service.find(:first, :conditions => {:name => > params['id']}) > service.stopservice > end > > def start > service = WMI::Win32_Service.find(:first, :conditions => {:name => > params['id']}) > service.startservice > end > > end > > *** Index view > > > > > > <% for service in @services %> > > > > > > <% end %> >
<%= link_to service.name, service.name %><%= service.state %><%= service.startmode %>
> > *** Show view > > <%= @status %> Thanks Gordon, I will give that option a try. Dave