Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8172879
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 6, 20262026-06-06T21:55:36+00:00 2026-06-06T21:55:36+00:00

I have an app file that looks like this ws_app.rb: require ‘rubygems’ require ‘sinatra’

  • 0

I have an app file that looks like this ws_app.rb:

require 'rubygems'
require 'sinatra'
require 'sinatra/respond_to'
require 'dm-core'
require 'dm-migrations'
require 'dm-timestamps'
require 'json'
require 'csv'

load 'models/Battery.rb'

Sinatra::Application.register Sinatra::RespondTo
DataMapper::setup(:default,"sqlite3://#{Dir.pwd}/mpt_hmi.sqlite3")

class MPTHMI  < Sinatra::Base

    load 'controller/BatteryController.rb'

end

The modules/Battery.rb looks like this:

class Battery
   include DataMapper::Resource

   property :id, Serial
   property :i_battery_manager_id, Integer
   property :c_battery_number, String
   property :c_battery_state, String
   property :c_voltage_byte, String
   property :i_voltage_int, Integer
   property :i_temperature, Integer
   property :i_resistance, Integer
   property :i_capacity, Integer
   property :i_cell_balancing_duration, Integer
   property :i_total_cell_balancing_duration, Integer
   property :i_age, Integer
   property :i_time_to_service, Integer
   property :created_at, DateTime
   property :updated_at, DateTime

   def to_my_json
     {
      :i_battery_manager_id => self.i_battery_manager_id,
      :c_battery_number => self.c_battery_number,
      :c_battery_state => self.c_battery_state,
      :c_voltage_byte => self.c_voltage_byte,
      :i_voltage_int => self.i_voltage_int,
      :i_temperature => self.i_temperature,
      :i_resistance => self.i_resistance,
      :i_capacity => self.i_capacity,
      :i_cell_balancing_duration => self.i_cell_balancing_duration,
      :i_total_cell_balancing_duration => self.i_total_cell_balancing_duration,
      :i_age => self.i_age,
      :i_time_to_service => self.i_time_to_service
     }
  end

end 

The controller/BatteryController.rb file looks like this:

get '/battery/:id' do 
   @battery = Battery.get(params[:id])
   respond_to do |wants|
     wants.html { erb :battery } # html
     wants.json { @battery.to_my_json.to_s } # json
   end
end

get '/batteries' do 
  @batteries = Battery.all
  respond_to do |wants|
    wants.html { erb :batteries } # html
    wants.json { 
      @batteries.all.inject({}) { |hsh, obj| 
        hsh[obj.id] = obj.to_my_json
        hsh
      }.to_json
    } 
  end
end

This works perfectly when I run Sinatra normally, like so:

$ ruby ws_app.rb
== Sinatra/1.3.2 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

Then go here:

http://0.0.0.0:4567/battery/5.json

I get the JSON I’m expecting:

{:i_battery_manager_id=>1, :c_battery_number=>"5", :c_battery_state=>"3", :c_voltage_byte=>"145", :i_voltage_int=>191, :i_temperature=>107, :i_resistance=>81, :i_capacity=>228, :i_cell_balancing_duration=>127, :i_total_cell_balancing_duration=>37, :i_age=>111, :i_time_to_service=>211}

but I need to deploy this on a Cherokee web server, so I want to make a rack config.ru file for this…

So I have a file mpthmiws.rb which contains

load 'ws_app.rb'

MPTHMI.run

And a config.ru file which contains

load 'mpthmiws.rb'

run MPTHMI.new

When I run

$ rackup config.ru 
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:9292, CTRL+C to stop

and go here:

http://0.0.0.0:9292/battery/1.json

but then I get the famous, “Sinatra doesn’t know this ditty – try get ‘/battery/1.json’ do “Hello World” end

If I take the first route from the controller/BatteryController.rb file and put it inside HMIMPT class in the ws_app.rb file like this:

require 'rubygems'
require 'sinatra'
require 'sinatra/respond_to'
require 'dm-core'
require 'dm-migrations'
require 'dm-timestamps'
require 'json'
require 'csv'

load 'models/Battery.rb'

Sinatra::Application.register Sinatra::RespondTo
DataMapper::setup(:default,"sqlite3://#{Dir.pwd}/mpt_hmi.sqlite3")

class MPTHMI  < Sinatra::Base

   get '/battery/:id' do 
     @battery = Battery.get(params[:id])
     respond_to do |wants|
       wants.html { erb :battery } # html
       wants.json { @battery.to_my_json.to_s } # json
     end
  end

end

I get this error:

undefined method `respond_to' for #<MPTHMI:0x00000001240a80>

How can I resolve this?
Thanks

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-06T21:55:38+00:00Added an answer on June 6, 2026 at 9:55 pm

    First of all, that thing with mpthmiws.rb and config.ru is overly complicated. Delete mpthmiws.rb and use this config.ru for use with rackup config.ru:

    require './ws_app'
    
    run MPTHMI
    

    If you want to run the App with plain old ruby ws_app.rb, use this run.rb file:

    require './ws_app'
    
    MPTHMI.run!
    

    Which brings us to the next point: NEVER EVER USE load! It executes the code in the loaded file, but it does not bring over any defined variables, functions etc. Use require instead! Here you must prefix the path with ./ or add ./ to $LOAD_PATH, but in turn you can omit the .rb extension.

    Next is your BatteryController.rb file. It should look like this:
    require ‘sinatra/respond_to’

    class BatteryController < Sinatra::Base
      register Sinatra::RespondTo
    
      get '/battery/:id' do 
         # ...
      end
    
      get '/batteries' do 
        # ...
      end
    end
    

    And this is also the point where you register your extensions — in the class where you need it.

    Now that we understand how load works, you may already have noticed that you were not actually loading the get blocks into the MPTHMI class, but rather executing them outside of the class. That is the only reason why your app worked anyway with plain old ruby ws_app.rb!

    You can properly include your controller into a class with use:

    # require all your gems
    # ...
    
    require './models/Battery'
    require './controller/BatteryController'
    
    DataMapper::setup(:default,"sqlite3://#{Dir.pwd}/mpt_hmi.sqlite3")
    
    class MPTHMI < Sinatra::Base
        use BatteryController
    end
    

    You can also leave off the register in here. Feel free to comment if you have further questions!


    And here’s the full diff:

    diff --git a/config.ru b/config.ru
    index eaa15fe..1568544 100644
    --- a/config.ru
    +++ b/config.ru
    @@ -1,3 +1,3 @@
    -load 'mpthmiws.rb'
    +require './ws_app'
    
    -run MPTHMI.new
    +run MPTHMI
    diff --git a/controller/BatteryController.rb b/controller/BatteryController.rb
    index 31e4910..c500c48 100644
    --- a/controller/BatteryController.rb
    +++ b/controller/BatteryController.rb
    @@ -1,20 +1,27 @@
    -get '/battery/:id' do 
    -   @battery = Battery.get(params[:id])
    -   respond_to do |wants|
    -     wants.html { erb :battery } # html
    -     wants.json { @battery.to_my_json.to_s } # json
    -   end
    -end
    +require 'sinatra/respond_to'
    
    -get '/batteries' do 
    -  @batteries = Battery.all
    -  respond_to do |wants|
    -    wants.html { erb :batteries } # html
    -    wants.json { 
    -      @batteries.all.inject({}) { |hsh, obj| 
    -        hsh[obj.id] = obj.to_my_json
    -        hsh
    -      }.to_json
    -    } 
    +class BatteryController < Sinatra::Base
    +  register Sinatra::RespondTo
    +  
    +  get '/battery/:id' do 
    +     @battery = Battery.get(params[:id])
    +     respond_to do |wants|
    +       wants.html { erb :battery } # html
    +       wants.json { @battery.to_my_json.to_s } # json
    +     end
       end
    -end
    +
    +  get '/batteries' do 
    +    @batteries = Battery.all
    +    respond_to do |wants|
    +      wants.html { erb :batteries } # html
    +      wants.json { 
    +        @batteries.all.inject({}) { |hsh, obj| 
    +          hsh[obj.id] = obj.to_my_json
    +          hsh
    +        }.to_json
    +      } 
    +    end
    +  end
    +
    +end
    \ No newline at end of file
    diff --git a/mpt_hmi.sqlite3 b/mpt_hmi.sqlite3
    index e69de29..9897cd9 100644
    Binary files a/mpt_hmi.sqlite3 and b/mpt_hmi.sqlite3 differ
    diff --git a/mpthmiws.rb b/mpthmiws.rb
    deleted file mode 100644
    index 87f3406..0000000
    --- a/mpthmiws.rb
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -load 'ws_app.rb'
    -
    -MPTHMI.run
    diff --git a/ws_app.rb b/ws_app.rb
    index 1cab867..4a6e332 100644
    --- a/ws_app.rb
    +++ b/ws_app.rb
    @@ -1,19 +1,18 @@
     require 'rubygems'
     require 'sinatra'
    -require 'sinatra/respond_to'
     require 'dm-core'
     require 'dm-migrations'
     require 'dm-timestamps'
     require 'json'
     require 'csv'
    
    -load 'models/Battery.rb'
    +require './models/Battery'
    +require './controller/BatteryController'
    
    -Sinatra::Application.register Sinatra::RespondTo
     DataMapper::setup(:default,"sqlite3://#{Dir.pwd}/mpt_hmi.sqlite3")
    
     class MPTHMI  < Sinatra::Base
    -
    -    load 'controller/BatteryController.rb'
    +    
    +    use BatteryController
    
     end
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have an app.config file that looks like this: <?xml version=1.0 encoding=utf-8 ?> <configuration>
Basically I have an XML file that looks like this: <?xml version=1.0 encoding=UTF-8?> <data>
I have an application config file that looks something like this: database: type: [db-type]
So, I have an app/assets/stylesheets/ directory structure that looks something like this: |-dialogs |-mixins
Ok, so I have an XML file that pretty much looks like this: <Templates>
I have this iPad app using Storyboard. There are some file that are marked
We have some html that looks like this: <form id=MyUserControl runat=server method=post> <script language=javascript
I have a list view that looks like this and that's its code ..
I have a gridview that looks something like this: <TemplateColumn> <ItemTemplate> <a href='<%#Eval(FilePathUrl)%>'>FileName</a> </ItemTemplate>
Title says all. I'll have navigation that looks like this and it's dynamically created

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.