Closed rchady closed 9 years ago
Can you post the app which reproduces the problem?
app.rb:
require 'sinatra'
get '/' do
"Hello World!"
end
config.ru:
require 'sinatra'
require './app.rb'
run Sinatra::Application
Can you post everything? That includes your Gemfile and Gemfile.lock.
There is no Gemfile in this case. It quite literally is a directory with those 2 files in it and a vhost configured to point at it, enabling passenger.
Using the same setup with rackup works as expected. I ran in to this issue trying to set up geminabox, and then stickler, so I stripped it down to the bare minimum to try to help isolate the overall issue.
This is the location directive I"m using for it currently, though I've tried multiple setups now.
location /gems {
alias /srv/www/sites/gems/public;
passenger_base_uri /gems;
passenger_app_root /srv/www/sites/gems;
passenger_document_root /srv/www/sites/gems/public;
passenger_enabled on;
}
I'm not able to reproduce this issue with Passenger 5.0.6, Ruby 2.2.0, and your exact same app code. Which exact Ruby version are you running? Which OS are you running? What happens if you run the app in Passenger Standalone?
Ruby: ruby 2.1.5p273 (2014-11-13) [x86_64-linux-gnu] OS: Debian (wheezy)
I don't have the standalone runtime installed on this system. If it will help, I will get it set up.
Btw, thanks for the quick response(s) on this. I've spent hours trying to narrow this down and identify what could be going on.
If it helps any, here is my entire gem list from this system:
addressable (2.3.8) bigdecimal (1.2.4) builder (3.2.2) bundler (1.9.4) coderay (1.1.0) crack (0.4.2) domain_name (0.5.23) excon (0.45.1) faraday (0.9.1) http-cookie (1.0.2) httpclient (2.6.0.1) io-console (0.4.2) json (1.8.1) little-plugger (1.1.3) logging (1.8.2) mechanize (2.7.3) method_source (0.8.2) mime-types (2.4.3) mini_portile (0.6.2) minitest (4.7.5) multi_json (1.11.0) multipart-post (2.0.0) nesty (1.0.2) net-http-digest_auth (1.4) net-http-persistent (2.9.4) nokogiri (1.6.6.2) ntlm-http (0.1.1) pry (0.10.1) psych (2.0.5) rack (1.6.0) rack-protection (1.5.3) rake (10.4.2, 10.1.0) rdoc (4.1.0) safe_yaml (1.0.4) sinatra (1.4.6) slop (3.6.0) stickler (2.4.2) test-unit (2.1.5.0) tilt (2.0.1) trollop (2.1.2) unf (0.1.4) unf_ext (0.0.6) webrobots (0.1.1) xpath (2.0.0)
If it helps any, here is an attempt of running it with passenger standalone:
App 6181 stdout:
App 6198 stdout:
App 6181 stderr: [ 2015-04-15 13:14:32.7962 6198/0x000000015c3ce8(Worker 1) utils.rb:85 ]: *** Exception NameError in Rack application object (uninitialized constant Rack::Request::SCRIPT_NAME) (process 6198, thread 0x000000015c3ce8(Worker 1)):
App 6181 stderr: from /var/lib/gems/2.1.0/gems/rack-1.6.0/lib/rack/request.rb:21:in `script_name'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/rack-1.6.0/lib/rack/showexceptions.rb:69:in `pretty'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:30:in `rescue in call'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:21:in `call'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:181:in `call'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:2021:in `call'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in `block in call'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1795:in `synchronize'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in `call'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/passenger-5.0.6/lib/phusion_passenger/rack/thread_handler_extension.rb:85:in `process_request'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/passenger-5.0.6/lib/phusion_passenger/request_handler/thread_handler.rb:155:in `accept_and_process_next_request'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/passenger-5.0.6/lib/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/passenger-5.0.6/lib/phusion_passenger/request_handler.rb:414:in `block (3 levels) in start_threads'
App 6181 stderr: from /var/lib/gems/2.1.0/gems/passenger-5.0.6/lib/phusion_passenger/utils.rb:111:in `block in create_thread_and_abort_on_exception'
[ 2015-04-15 13:14:32.7965 6148/7f0541b5c700 age/Hel/Req/Utils.cpp:89 ]: [Client 1-1] Sending 502 response: application did not send a complete response
^CStopping web server... done
@OnixGH I think I've seen someone else reporting this before, but I haven't been able to track down the issue. Can you try reproducing on the same OS and Ruby version as him?
A friend set up that simple application using the nginx .debs you provide and received the same error... whew, at least I'm not insane. :)
The error is indeed reproducible, even with Ruby 2.2.0.
Maybe it's an OS X vs Linux thing. I'll take a look with you when I arrive at the office.
We've found the cause of the issue. It is not a Passenger bug.
Your system has two Rack versions installed. One is version 1.5.0, installed by APT, and is located in /usr/lib/ruby/vendor_ruby. The other one is version 1.6.0, installed by RubyGems, and is located in /var/lib/gems/2.1.0/gems/rack-1.6.0.
Before Passenger loads your app, Passenger calls require "rack"
. Because /usr/lib/ruby/vendor_ruby is in Ruby's $LOAD_PATH, Passenger loads the Rack 1.5.0 library installed by APT.
However Sinatra requires Rack 1.6.0 or later, so at some point it tries to load a file not found in Rack 1.5.0. At that point, RubyGems kicks in and loads rack/request.rb from /var/lib/gems/2.1.0/gems/rack-1.6.0. Now you've ended up with two conflicting versions of Rack loaded in the same Ruby process, and things break.
The solution is to use a Gemfile. This way, Bundler will ensure that /var/lib/gems/2.1.0/gems/rack-1.6.0 is in $LOAD_PATH first.
The reason why 'rackup' worked for you, is because the 'rackup' command that is first in your $PATH is the one installed by RubyGems, and not the one installed by APT. The 'rackup' command installed by RubyGems activates the rack 1.6.0 gem, and ensures that /var/lib/gems/2.1.0/gems/rack-1.6.0 is in $LOAD_PATH first. Thus, it happens to bypass the problem.
I am on OS X, so I don't have rack.rb installed in /usr/lib/ruby/vendor_ruby, and so I couldn't reproduce your problem.
Aha, that makes perfect sense. Thank you for finding this for me. It also explains why it happens on Debian and not my other systems. Hopefully the log of this will help other people that get bit by this too.
Holy crap, thank you. I thought I was going crazy. You work is appreciated, ladies and/or gentlemen.
Thanks, I had the same problem and this explained / fixed it!
I have the same problem, but couldn't fix it as suggested. I'm trying to install Locomotive Engine (https://github.com/locomotivecms/engine) in an Ubuntu 14.10 box with ruby 2.1.6, rails 4.2.6 (therefore there's a Gemfile where I explicitly added rack 1.6.0), and I have updated passenger to the last version 5.0.28 (which is supposed to prefer rack from the app), and had no luck with it, but looks like the same rack conflict mentioned here. Any ideas would be greatly appreciated.
App 18399 stderr: [ 2016-05-24 12:47:08.9948 18418/0x007f3b194134e8(Worker 1) utils.rb:87 ]: *** Exception NoMethodError in Rack application object (undefined method `path' for nil:NilClass) (process 18418, thread 0x007f3b194134e8(Worker 1)):
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/locomotivecms-3.1.1/lib/locomotive.rb:66:in `mounted_on'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/locomotivecms-3.1.1/lib/locomotive/middlewares/image_thumbnail.rb:29:in `route'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/locomotivecms-3.1.1/lib/locomotive/middlewares/image_thumbnail.rb:12:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/dragonfly-1.0.12/lib/dragonfly/cookie_monster.rb:9:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/lock.rb:17:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/static.rb:120:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/engine.rb:518:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/application.rb:165:in `call'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/passenger-5.0.28/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/passenger-5.0.28/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:152:in `accept_and_process_next_request'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/passenger-5.0.28/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:113:in `main_loop'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/passenger-5.0.28/src/ruby_supportlib/phusion_passenger/request_handler.rb:416:in `block (3 levels) in start_threads'
App 18399 stderr: from /usr/local/lib/ruby/gems/2.1.0/gems/passenger-5.0.28/src/ruby_supportlib/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'
[ 2016-05-24 12:47:08.9953 18318/7feb25276700 age/Cor/Con/InternalUtils.cpp:112 ]: [Client 1-6] Sending 502 response: application did not send a complete response
Your error message is different though? How do you know it's the same problem? Do you have multiple rack versions? Did you confirm that the error doesn't happen with rackup?
Yes, this are the rack versions installed:
/usr/local/lib/ruby/gems/2.1.0/gems/rack-1.6.0/ /usr/local/lib/ruby/gems/2.1.0/gems/rack-1.6.1/ /usr/local/lib/ruby/gems/2.1.0/gems/rack-1.6.4/
Errors are different, but they are rack related, therefore my assumption, but I have no experience with this issues, so might be mistaken of course.
Not sure how to run the application with rackup. I'll investigate. Thanks for your answer.
root@lapmid:~/Documents/Sites/alpha_blog# rails s
=> Booting Thin
=> Rails 5.1.4 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Exiting
/var/lib/gems/2.3.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/session/abstract_store.rb:78:in `<module:Session>': uninitialized constant Rack::Session::Abstract::Persisted (NameError)
from /var/lib/gems/2.3.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/session/abstract_store.rb:8:in `<module:ActionDispatch>'
from /var/lib/gems/2.3.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/session/abstract_store.rb:7:in `<top (required)>'
from /var/lib/gems/2.3.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/session/cookie_store.rb:2:in `<top (required)>'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application/configuration.rb:180:in `const_get'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application/configuration.rb:180:in `session_store'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application/default_middleware_stack.rb:56:in `block in build_stack'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application/default_middleware_stack.rb:13:in `tap'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application/default_middleware_stack.rb:13:in `build_stack'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application.rb:501:in `default_middleware_stack'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/engine.rb:506:in `block in app'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/engine.rb:504:in `synchronize'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/engine.rb:504:in `app'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application/finisher.rb:45:in `block in <module:Finisher>'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/initializable.rb:30:in `instance_exec'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/initializable.rb:30:in `run'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/initializable.rb:59:in `block in run_initializers'
from /usr/lib/ruby/2.3.0/tsort.rb:228:in `block in tsort_each'
from /usr/lib/ruby/2.3.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
from /usr/lib/ruby/2.3.0/tsort.rb:431:in `each_strongly_connected_component_from'
from /usr/lib/ruby/2.3.0/tsort.rb:349:in `block in each_strongly_connected_component'
from /usr/lib/ruby/2.3.0/tsort.rb:347:in `each'
from /usr/lib/ruby/2.3.0/tsort.rb:347:in `call'
from /usr/lib/ruby/2.3.0/tsort.rb:347:in `each_strongly_connected_component'
from /usr/lib/ruby/2.3.0/tsort.rb:226:in `tsort_each'
from /usr/lib/ruby/2.3.0/tsort.rb:205:in `tsort_each'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/initializable.rb:58:in `run_initializers'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/application.rb:353:in `initialize!'
from /root/Documents/Sites/alpha_blog/config/environment.rb:5:in `<top (required)>'
from config.ru:3:in `require_relative'
from config.ru:3:in `block in <main>'
from /usr/lib/ruby/vendor_ruby/rack/builder.rb:55:in `instance_eval'
from /usr/lib/ruby/vendor_ruby/rack/builder.rb:55:in `initialize'
from config.ru:in `new'
from config.ru:in `<main>'
from /usr/lib/ruby/vendor_ruby/rack/builder.rb:49:in `eval'
from /usr/lib/ruby/vendor_ruby/rack/builder.rb:49:in `new_from_string'
from /usr/lib/ruby/vendor_ruby/rack/builder.rb:40:in `parse_file'
from /var/lib/gems/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:319:in `build_app_and_options_from_config'
from /var/lib/gems/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:219:in `app'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands/server/server_command.rb:24:in `app'
from /var/lib/gems/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:354:in `wrapped_app'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands/server/server_command.rb:80:in `log_to_stdout'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands/server/server_command.rb:42:in `start'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands/server/server_command.rb:135:in `block in perform'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands/server/server_command.rb:130:in `tap'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands/server/server_command.rb:130:in `perform'
from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/command/base.rb:63:in `perform'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/command.rb:44:in `invoke'
from /var/lib/gems/2.3.0/gems/railties-5.1.4/lib/rails/commands.rb:16:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
please help me out in this
@lapmid Booting Thin
You are using thin, not passenger.
@CamJN yaa but error is little bit same and i was unabe to find the solution for this so it will be great for me if i get some solution
I am getting the same error with Passenger Enterprise, JRuby 9.1.13 and rails 5.1.0. I dig and tried lots of combination but nothing works. One of the trait the error comes when there is heavy load on the server.
Here is server error log:
App 10835 stderr: [ 2018-01-25 06:43:45.5675 10835/0x2343de26(Worker 1) utils.rb:71 ]: *** Exception NameError in Rack application object (uninitialized constant Rack::Runtime::Utils) (process 10835, thread 0x2343de26(Worker 1)):
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/rack-2.0.3/lib/rack/runtime.rb:21:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/activesupport-5.1.4/lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/actionpack-5.1.4/lib/action_dispatch/middleware/executor.rb:12:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/rack-2.0.3/lib/rack/sendfile.rb:111:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/actionpack-5.1.4/lib/action_dispatch/middleware/ssl.rb:66:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/honeybadger-3.0.0/lib/honeybadger/rack/error_notifier.rb:34:in `block in call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/honeybadger-3.0.0/lib/honeybadger/agent.rb:321:in `with_rack_env'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/honeybadger-3.0.0/lib/honeybadger/rack/error_notifier.rb:31:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/honeybadger-3.0.0/lib/honeybadger/rack/user_feedback.rb:29:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/honeybadger-3.0.0/lib/honeybadger/rack/user_informer.rb:19:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/railties-5.1.4/lib/rails/engine.rb:522:in `call'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/newrelic_rpm-3.18.1.330/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:81:in `block in process_request'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/active_support_tagged_logger_support.rb:15:in `block in maybe_tag_logger'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:69:in `block in tagged'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:26:in `tagged'
App 10835 stderr: from /home/cmthakur/.gem/jruby/2.3.3/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:69:in `tagged'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/active_support_tagged_logger_support.rb:15:in `maybe_tag_logger'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:81:in `process_request'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:137:in `accept_and_process_next_request'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:98:in `main_loop'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:440:in `block in start_threads'
App 10835 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:97:in `block in create_thread_and_abort_on_exception'
@cmthakur this issue is closed and was determined not to be a Passenger issue. For Enterprise support please log in to your account and submit a ticket so we can provide better help.
I've tried to google for this, tried everything I can think of to figure out why this is happening, but I am at a loss... so I'm asking here. Any idea why this happens with nginx+passenger, but not rackup? It is quite literally a "Hello world" sinatra app at this point in time.