最近我一直在阅读Passenger/Rails中的Rack架构,以及它如何通过在服务器启动时缓存代码或类来为每个请求带来速度和更低的内存使用率.
PHP有什么类似的东西吗?将代码(而不是数据)保存在内存中的东西,因此应用程序不需要每次都读取每个文件.
我正在尝试对Sinatra应用程序进行一些愚蠢的自动配置,允许从不同的子URI使用它,具体取决于它是使用Apache和Passenger运行,还是使用Thin Web服务器运行.
所以我的问题是:是否有可能从Sinatra应用程序中找出哪个Web服务器运行它?
我添加use Rack::Deflater到config.ru试图提供gzip压缩css和js.
但是当我加载页面时,我仍然看到css和js服务而不是css.gz
我应该看看css.gz还是js.gz?还是我错过了什么
当我从我的app目录中运行rackup时,它运行正常:
walkraft@li234-166:~/discourse$ rackup config.ru
Flushing redis (development mode)
/home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require': iconv will be deprecated in the future, use String#encode instead.
/home/walkraft/discourse/vendor/gems/message_bus/lib/message_bus.rb:130: warning: already initialized constant ENCODE_SITE_TOKEN
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:9292, CTRL+C to stop
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试从此目录外部运行rackup:
walkraft@li234-166:~$ rackup discourse/config.ru
/home/walkraft/discourse/config/application.rb:7:in `require': cannot load such file -- ./lib/discourse_plugin_registry (LoadError)
from /home/walkraft/discourse/config/application.rb:7:in `<top (required)>'
from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/walkraft/discourse/config/environment.rb:2:in `<top (required)>'
from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下HelloWorld机架程序并收到错误.感谢任何帮助.
ruby version ruby 1.9.3p448(2013-06-27)[x86_64-cygwin]
# helloworld.rb
require 'rack'
require 'rack/server'
class HelloWorld
def response
[200, {}, 'Hello World']
end
end
class HelloWorldApp
def self.call(env)
HelloWorld.new.response
end
end
Rack::Server.start :app => HelloWorldApp
Run Code Online (Sandbox Code Playgroud)
错误
[2013-11-26 11:23:03] ERROR NoMethodError: undefined method `each' for "Hello World":String
/usr/lib/ruby/gems/1.9.1/gems/rack-1.5.2/lib/rack/handler/webrick.rb:72:in `service'
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
Run Code Online (Sandbox Code Playgroud) 我做了一个小的Sinatra应用程序.在我的Gemfile中添加gem 'puma'生产组
group :production do
gem 'puma'
gem 'dm-postgres-adapter'
end
Run Code Online (Sandbox Code Playgroud)
我设置了生产模式 config.ru
set :environment, :production
Run Code Online (Sandbox Code Playgroud)
但是在我运行之后,运行backup默认的webrick Web服务器.我怎么解决这个问题?
我尝试增加超时,我有应用程序在生产中运行,它已部署在heroku上.我有一些请求需要超过30秒.这些请求都插入数据库中.由于要求,我无法将这些插入移动到后台工作.我将超时时间增加到60秒,后来我把它增加到80秒,并且工作正常.但最近它停止了运行,无论我做什么都没有让我增加超时.这对开发环境完全正常,但不适用于生产.我使用的宝石是机架式的
我用过这些选项:
Rack::Timeout.timeout = 60 # seconds
Rack::Timeout.wait_timeout = 60
Rack::Timeout.wait_overtime = 60
Rack::Timeout.service_timeout = 60
Rack::Timeout.service_past_wait = true
Run Code Online (Sandbox Code Playgroud)
最初我只使用超时选项,它曾经工作正常.但后来我尝试添加更多选项,希望其中任何一个都能正常工作.
服务器输出:
2018-09-17T08:00:32.163182+00:00 heroku[router]: at=error code=H12 desc="Request timeout"
method=POST path="/organizations/53/events" host=HOST_NAME
request_id=abbd22bf-5298-4480-m027-aa00a52a0587 fwd="103.7.79.236" dyno=web.1
connect=1ms service=30135ms status=503 bytes=0 protocol=https
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.提前致谢.
刚刚将 Rails 4.2 应用程序更新到 5.2.1,但无法将其推送到 Heroku。以下错误。我已经通过在我的 rack_timeout.rb 初始值设定项中添加以下内容来尝试这里和这里推荐的内容。
Rails.application.config.middleware.insert_before Rack::Runtime, Rack::Timeout, service_timeout: 5
Run Code Online (Sandbox Code Playgroud)
但这无济于事。想法?
$ git push heroku
...
remote: -----> Installing node-v8.10.0-linux-x64
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: rake aborted!
remote: NoMethodError: undefined method `timeout=' for Rack::Timeout:Class
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/config/initializers/rack_timeout.rb:2:in `<top (required)>'
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `load'
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `block in load'
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:253:in `load_dependency'
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `load'
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/vendor/bundle/ruby/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:657:in `block in load_config_initializer'
remote: /tmp/build_c66056b406a6fcdc37b9dde3124992ce/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.1/lib/active_support/notifications.rb:170:in `instrument' …Run Code Online (Sandbox Code Playgroud)