`
CharlesCui
  • 浏览: 417212 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Siantra没有后台模式?Webrick源码中server.rb里后台进程的实现很简洁

阅读更多
Windows里面写好Sinatra的代码传到Unix上面,
chmod +x之后直接运行脚本报错:
: bad interpreter: No such file or directory
这是由于该文件是以DOS格式编辑的,Unix不认识,我们需要转换一下。

用Vi打开,
:set ff?查看一下是不是Dos的,
set ff=unix转换成Unix,
然后再运行下试试。

Sinatra没找到如何以后台模式启动,可能这不在它要考虑的范围内吧。
把下面这段Webrick的守护进程代码加进去,
最后再加上一句:
Daemon.start就OK了。

ps -ajx看一下:

PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1 15755 15754 15754 ?           -1 S        0   0:00 /usr/local/bin/ruby ./server.rb

典型的守护进程:)

  class Daemon
    def Daemon.start
      exit!(0) if fork
      Process::setsid
      exit!(0) if fork
      Dir::chdir("/")
      File::umask(0)
      STDIN.reopen("/dev/null")
      STDOUT.reopen("/dev/null", "w")
      STDERR.reopen("/dev/null", "w")
      yield if block_given?
    end
  end


用的时候抄一下就行,哈哈哈哈。

不过要理解守护进程的实现原理,请只会傻写Java代码的同学们看《UNIX环境编程》 :)

================整理下之后==============

#!/usr/local/bin/ruby
require 'rubygems'
require 'sinatra/base'
require 'rack'
require 'open3'

$build_sh = File.join("/home/admin/taiji/src/taiji/src/task","build.rb")

class TaijiBuilderServer < Sinatra::Base
	get '/taiji' do
		"{stat:'Running'}"
	end

	get '/taiji/build' do
		if (params[:project_name] && params[:svn] && params[:project_id]) != nil then
			#另起一个进程处理更新SVN和编译以及部署、启动等操作,不能在Sinatra同进程中进行!
			Open3.popen3 %Q{ruby #{$build_sh} #{params[:project_name]} #{params[:svn]} #{params[:project_id]}}
			"{stat:'OK',params:'#{Rack::Request.new(env).params.inspect}',ts:'#{Time.now().to_s}',cmd:'ruby #{$build_sh} #{params[:project_name]} #{params[:svn]} #{params[:project_id]}'}"
		else
			"{stat:'Params Error'}"
		end
	end
end

class Daemon
    def Daemon.start
      exit!(0) if fork
      Process::setsid
      exit!(0) if fork
      Dir::chdir("/")
      File::umask(0)
      STDIN.reopen("/dev/null")
      #以下两个日志需要以a(追加)的方式打开日志文件,w将清空原有内容
      #输出Sinatra默认输出
      STDOUT.reopen("/home/admin/taiji/logs/build_stdout.log", "a+")
      #输出Error日志
      STDERR.reopen("/home/admin/taiji/logs/build_stdout.log", "a+")
      yield if block_given?
    end
end

#启动精灵进程的同时启动Sinatra应用
Daemon.start{TaijiBuilderServer.run! :host => '10.2.226.20', :port => 9090}


翻了下以前的代码,发现Sinatra也可以这样使用:
Rack::Handler::Mongrel.run builder, :Port => 9292

这样的话估计会有原生的Mongrel或者Thin等守护进程的实现,

没必要为了实现一个小功能浪费那么多时间去学习了,我成不了专家,也没这打算。
分享到:
评论

相关推荐

    ruby example webrick

    ruby sample: @echo off cd D:\proj\demo rem previously drop tables call rake db:migrate VERSION=0 rem load test data (it depends on the db:environment and db:...call ruby script/server webrick @echo on

    RailsLite:Rails lite是轻量级的Rails克隆

    Rubybin / basic_server.rb Rubybin / controller_server.rb Rubybin / params_server.rb Rubybin / router_server.rb Rubybin / session_server.rb Rubybin / template_server.rb 玩得开心! 如何使用 您...

    Webrick rails外部电脑访问慢

    Webrick rails 外部电脑 访问慢

    webrick:HTTP服务器工具包

    韦伯里克WEBrick是一个HTTP服务器工具包,可以...安装将此行添加到应用程序的Gemfile中: gem 'webrick' 然后执行: $ bundle或将其自己安装为: $ gem install webrick用法要创建一个新的WEBrick :: HTTPServer,它

    evanknapke.github.io

    如果收到此错误: /jekyll/commands/serve/servlet.rb:3:in 'require': cannot load such file -- webrick (LoadError) :3: /jekyll/commands/serve/servlet.rb:3:in 'require': cannot load such file -- webrick...

    arras-mayhem:Arras.io客户

    阿拉斯·混乱 arras-mayhem服务器的官方客户端。 特征 声音特效! 音乐! 轻巧,独立客户! 更多颜色!...客户端可以作为Node.js Express,PHP,Go HTTP,Ruby ... Ruby Webrick服务器: ruby main.rb C网络服务器

    blockchain-ruby:Ruby中的简单区块链

    区块链RubyRuby中的一个简单的Blockchain实现。 您可以用不到200行代码来模拟区块链。概念这是基于这篇文章“ 做出的。版本号Ruby 2.5.0跑步安装宝石$ bundle install 跑步$ bundle exec ruby blockchain.rb[2018-01...

    Shotgun:重新加载机架开发服务器的Rackup版本

    每次接收到请求时,它都会派生,将应用程序加载到子进程中,处理请求并退出子进程。 结果是在每个请求上干净,在应用程序范围内重新加载所有源文件和模板。 用法 安装: gem install shotgun 使用机架文件启动...

    Logbot:带有基于 Web 的实时查看器的简单 IRC 记录器

    日志机器人 Logbot 是一个简单的 IRC 记录器,带有基于 Web ...运行foreman start启动网络服务器(WEBrick)和 Logbot 代理 访问 。 如何贡献 只需破解它并向我发送拉取请求;) 资源 有关许多错误修复和增强功能,请参阅

    weathergetter:使用anon的Sinatra应用程序。 地理位置查找用户的位置并返回天气状况

    设置git clone此文件cd到应用程序的根ruby app.rb在您的本地主机中运行该应用程序:4567使用的技术语言:Ruby 堆栈:Ruby / Sinatra 服务器:WEBrick 其他依赖关系:在Gemfile.lock中列出前端:JavaScript / jQuery ...

    mini-rails:仅有600行代码的精简版Rails,可作为学习Rails原始码的向导-代

    但二进制文件太多,核心代码都没没在大量细节实现中,全部看完不现实,走马观花又很难领会精髓;纸上得来终觉浅,眼过千遍,不如手过一遍,干脆重新造个轮子;于是就有了mini-rails,参照Rails原始码,省略细节,...

    wix-rails-rss-feed-app

    RSS Feed应用程序-(Ruby on Rails) 关于 Wix应用程序RSS Feed,演示了如何构建可用于生产环境的应用程序。 使用Ruby on Rails服务器和Wix客户端库从头开始使用Client&Server。 单击此处获取实时示例。 介绍 该...

    web-server-one-liners

    Ruby WEBrick通过联合国 PHP(5.4+) 节点静态(Node.js:需要节点静态) 默认值为Python 2.x或3.x,具体取决于您的环境。 用法 $ webserver PROGRAM PORT_NUMBER 例子 # Default (Python 2.x or 3.x) using ...

    rails-lite:轻巧的Rails-带有示例应用

    这将在projects文件夹中建立一个新目录,其中包含创建功能性Web应用程序所需的所有文件。示例项目在projects文件夹中有一个简单的示例项目,其中存储了忍者龟及其忍者主人的名字。功能性SQLite3数据库存储包含非常...

    notepasser:一个简单的消息应用程序

    用法运行bundle exec camping -s webrick -h YOUR_IP_ADDRESS lib/notepasser.rb以使服务器运行。 让您的朋友编写一个客户端来使用 HTTParty 向您发送消息。 每当您添加对 API 调用的支持时,向该文件的“API 调用”...

    wdi_10_js_d3_lab_from_scratch

    运行ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port =&gt; 8000, :DocumentRoot =&gt; Dir.pwd); trap('INT') { s.shutdown }; s.start"开始网络服务器。

    github_viewer

    github_viewer Angular制造。 将其拉下并在本地运行 ruby -rwebrick -e'WEBrick :: HTTPServer.new(:Port =&gt; 3000,:DocumentRoot =&gt; Dir.pwd).start'

    Rails脚手架使用实例

    脚手架是rails非常省事的方法,一些简单的增删改查脚手架都能实现,省去了我们不必要的麻烦,那么怎么用rails的脚手架呢,今天来讲解一下。 .指定端口启动rails项目 代码如下:ruby script/server webrick -p 3000 0...

    thecreation

    ruby -rwebrick -rwebrick/https -e 'WEBrick::HTTPServer.new(:DocumentRoot =&gt; "./", :Port =&gt; 9090, :SSLEnable =&gt; true, :SSLCertName =&gt; [["CN", WEBrick::Utils::getservername]] ).start'

    java开发oa系统源码-cybersecuritybase-project-2:networksecuritybase-project-2

    java开发oa系统源码网络安全基地-课程项目二 设置 与其要求 安装在 Kali 上,有注册用户的规则 初始扫描 目标 IP:172.28.128.3。 使用 msf 命令: nmap -v -sV 172.28.128.3 -oA subnet_1 结果 Nmap scan report ...

Global site tag (gtag.js) - Google Analytics