我有一个Sinatra :: Base webservice,我想从命令行Ruby程序开始,所以我有这个:
# command line program file
require 'mymodule/server'
puts "Running on 0.0.0.0:4567, debugging to STDOUT..."
MyModule::Server.run! bind: '0.0.0.0', port: 4567, environment: :production
Run Code Online (Sandbox Code Playgroud)
这按预期工作但它抛出:
$ myscript
Running on 0.0.0.0:4567, debugging to STDOUT...
== Sinatra/1.3.1 has taken the stage on 4567 for production 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
127.0.0.1 - - [23/Dec/2011 18:44:55] "POST /images HTTP/1.1" 200 360 0.0133 …Run Code Online (Sandbox Code Playgroud) 如何阻止Rack Thin返回以下类型的初始消息?
>>瘦Web服务器(v1.3.1代号为Triple Espresso)
>>最大连接数设置为1024
>>在0.0.0.0:3000上加速,CTRL + C停止
我这样使用它:
Rack::Handler::Thin.run(Rack::Builder.new do
map("/resource/"){run(Rack::File.new("/"))}
map("/") do
run(->env{
h = Rack::Utils.parse_nested_query(env["QUERY_STRING"])
[200, {},[routine_to_generate_dynamic_content(h)]]
})
end
end, Port: 3000)
Run Code Online (Sandbox Code Playgroud) 我有一个rails应用程序我在瘦服务器上运行以利用EventMachine运行循环.问题是我希望能够包含em-websocket来处理来自ws的信息,并在不停止EM运行循环的情况下停止并启动websocket.这就是我启动websocket的方式.
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen { }
ws.onclose { }
ws.onmessage { |msg| }
end
Run Code Online (Sandbox Code Playgroud)
问题出在启动/停止代码中.来自em-websocket的文档
#Start WebSocket
def self.start(options, &blk)
EM.epoll
EM.run do
trap("TERM") { stop }
trap("INT") { stop }
EventMachine::start_server(options[:host], options[:port],
EventMachine::WebSocket::Connection, options) do |c|
blk.call(c)
end
end
end
#Stop WebSocket
def self.stop
puts "Terminating WebSocket Server"
EventMachine.stop
end
Run Code Online (Sandbox Code Playgroud)
问题是内部的em-websocket代码不跟踪来自EM:start_server的签名,以便能够调用EventMachine :: stop_server(签名)来关闭它.有没有办法可以在不修改em-websocket的情况下覆盖这些函数,这样我就可以安全地启动/停止这些websockets?我想它的表现更像是标准的Eventmachine服务器.
当我通过HTTPS访问时,我需要测试页面上某些元素的行为 - 我想知道如何使用HTTPS在本地测试这个sinatra应用程序.如果我的问题甚至没有意义,我很抱歉,但我想通过HTTPS通过我的网络浏览器连接到localhost.
我有一个非常基本的测试应用程序.当我执行此命令时,服务器忽略我指定的端口并在端口4567上运行Thin.为什么我指定的端口被忽略?
$ruby xxx.rb start -p 8000
== Sinatra/1.3.3 has taken the stage on 4567 for production with backup from Thin
>> Thin web server (v1.4.1 codename Chromeo)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
Run Code Online (Sandbox Code Playgroud)
xxx.rb文件
require 'Thin'
rackup_file = "config.ru"
argv = ARGV
argv << ["-R", rackup_file ] unless ARGV.include?("-R")
argv << ["-e", "production"] unless ARGV.include?("-e")
puts argv.flatten
Thin::Runner.new(argv.flatten).run!
Run Code Online (Sandbox Code Playgroud)
config.ru文件
require 'sinatra'
require 'sinatra/base'
class SingingRain < Sinatra::Base
get '/' do
return 'hello'
end …Run Code Online (Sandbox Code Playgroud) 如果我使用的是字体并且没有粗体版本,我可以使用标签text-shadow,添加轮廓以使细字体变粗.
但我只有粗体字,我想让它更薄.我不知道要使用什么CSS或Javascript或jQuery脚本.
是否可以使用CSS,Javascript或jQuery使粗体字体变薄?怎么样?
我得到它与Puma合作,但使用Thin我没有得到任何流输出,我必须杀死服务器来阻止它.我正在测试使用tenderlove的初始示例输出当前时间:
http://tenderlovemaking.com/2012/07/30/is-it-live.html
对我来说一个更普遍的问题是,这种类型的流媒体在具有任何重要流量的应用程序中是否实用?我想如果有数千名用户在这样的应用程序中同时连接到一个流,那么很容易就会出现问题.Puma将如何扩展?我读到Puma每个连接使用1个线程.这有效吗?那么Thin呢?所有连接都在同一个线程中吗?这会更有效吗?
我的另一个问题是,即使使用Puma,我只能在本地使用一个连接.当我从第二个终端卷曲时,我没有得到任何输出......有人知道为什么吗?
我有一个带有websocket-rails gem的Ruby on Rails 3.2应用程序,在nginx反向代理后面的瘦web服务器中运行.
除了nginx反向代理,一切正常.通过删除nginx反向代理,websocket通信工作正常.(开发和生产).使用nginx作为websockets的反向代理是问题的起点.
Nginx 1.3.13及更高版本应该能够支持websocket代理.根据这里和这里的文档,我创建了以下nginx配置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream ravecy {
server localhost:3000;
server localhost:3001;
}
server {
listen 80;
server_name test.ravecy.com;
root /var/www/ravecy.com/public;
location / {
try_files $uri @ravecy;
}
location @ravecy {
proxy_pass http://ravecy;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,遗憾的是,这不起作用.我不知道为什么,但在我看来,nginx并没有处理我的websocket连接尝试作为websocket连接而是常规HTTP连接,如日志所示:
==> production.log <==
Started GET "/chat" …Run Code Online (Sandbox Code Playgroud) 我可以使用THIN
bundle exec thin start --ssl --ssl-verify --ssl-key-file /private/etc/apache2/ssl/server.key --ssl-cert-file /private/etc/apache2/ssl/server.crt
Run Code Online (Sandbox Code Playgroud)
它完美地在控制台/终端中工作
但是当我尝试在"运行/调试配置" - >"编辑脚本参数"下将这些选项附加到rubymine中时,我得到:
/Users/jan/.rbenv/versions/1.9.3-p392/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/jan/RubymineProjects/myapp/script/rails server thin -b 0.0.0.0 -p 3000 -e development --ssl-verify --ssl-key-file /private/etc/apache2/ssl/server.key --ssl-cert-file /private/etc/apache2/ssl/server.crt
/Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/server.rb:33:in `parse!': invalid option: --ssl-verify (OptionParser::InvalidOption)
from /Users/jan/.gem/ruby/1.9.1/gems/rack-1.4.5/lib/rack/server.rb:283:in `parse_options'
from /Users/jan/.gem/ruby/1.9.1/gems/rack-1.4.5/lib/rack/server.rb:180:in `options'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/server.rb:54:in `set_environment'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/server.rb:42:in `initialize'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands.rb:50:in `new'
from /Users/jan/.gem/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>'
from /Users/jan/RubymineProjects/myapp/script/rails:6:in `require'
from /Users/jan/RubymineProjects/myapp/script/rails:6:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
完成退出代码1的流程任何人都可以帮助我们/我吗?
非常感谢!
我需要运行thin start或thin -ssl ... start我的Rails应用程序的根目录中,看到输出应用程序日志到控制台,类似什么rails s呢