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等守护进程的实现,
没必要为了实现一个小功能浪费那么多时间去学习了,我成不了专家,也没这打算。
分享到:
- 2009-08-10 10:45
- 浏览 1192
- 评论(0)
- 论坛回复 / 浏览 (0 / 1783)
- 查看更多
相关推荐
在使用Webrick作为Rails服务器的过程中,很多开发者遇到了一个常见的问题:当尝试从外部电脑访问Webrick服务器时,访问速度变得异常缓慢。这给开发和测试带来了很大的不便。 #### 问题分析 在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
Rubybin / basic_server.rb Rubybin / controller_server.rb Rubybin / params_server.rb Rubybin / router_server.rb Rubybin / session_server.rb Rubybin / template_server.rb 玩得开心! 如何使用 您...
【WebServer_v19_HTTP_wevl3_web_server服务器源码】是一个基于HTTP协议的轻量级Web服务器项目,主要用于教学和学习目的。这个项目的核心是实现一个简单的服务端,能够处理来自多个客户端的请求,同时提供一个类似...
`api.rb`很可能是核心的API服务器代码,定义了各种端点和处理程序。在Ruby中,这通常涉及到创建一个类或者模块,该类或模块响应XML-RPC请求,执行业务逻辑,并返回结果。开发者可能会使用XML-RPC库提供的方法来注册...
Ruby服务器通过多线程、多进程或事件驱动(如Reactor模式)等方式实现并发。例如,Puma使用工作进程和线程池来处理请求,既利用了多核CPU,又避免了线程安全问题。 6. **性能优化**: 为了提高性能,Ruby服务器...
韦伯里克WEBrick是一个HTTP服务器工具包,可以...安装将此行添加到应用程序的Gemfile中: gem 'webrick' 然后执行: $ bundle或将其自己安装为: $ gem install webrick用法要创建一个新的WEBrick :: HTTPServer,它
Ruby是一种面向对象的、动态类型的编程语言,因其简洁的语法和强大的元编程能力而受到开发者喜爱。对于"bookinfo-details",我们还需要运行名为`details.rb`的脚本,通过命令行参数`9080`指定服务器监听的端口。 在...
在当今的Web开发中,实时通信功能已经成为许多应用程序不可或缺的一部分,比如在线聊天、实时通知等。Rails框架的ActionCable是实现这些功能的重要工具,它允许开发者轻松创建WebSocket应用程序,提供全双工、低延迟...
6. 运行WEBrick服务器来测试安装:ruby script/server -e production 7. 使用默认的用户名和密码登录:用户名:admin 密码:admin 8. 可以到管理&配置界面修改系统的配置参数。 SMTP服务器配置: 在config/...
Rails框架支持在应用程序中轻松集成SSL,以保护用户敏感信息,如登录凭据和支付详情。以下是一些关于在Rails中实施SSL的关键知识点: 1. **SSL简介**:SSL(Secure Sockets Layer)是一种网络安全协议,用于加密...
Ruby on Rails是一款使用Ruby语言开发的应用程序框架,其核心是MVC(Model-View-Controller)模式,能够快速高效地构建Web应用。Rails以其简洁、高效著称,被广泛应用于各种规模的Web应用开发中。 #### 二、项目...
8. **集群模式**:Puma可以通过集群模式进一步提升性能,通过在多个工作进程中分配请求,有效地利用多核处理器。 9. **SSL支持**:Puma可以直接处理HTTPS连接,提供内置的SSL/TLS支持,以确保数据传输的安全性。 ...
标题中的“http_server_implementations”暗示了我们将探讨如何在Ruby中实现一个HTTP服务器。HTTP服务器是互联网上网站和应用程序的基础,它们负责接收客户端(如浏览器)的HTTP请求,并返回相应的HTTP响应。Ruby...
MongoDB是一个高性能、无模式的文档型数据库,广泛应用于Web开发、数据分析、存储大规模数据等场景。在Linux环境下安装MongoDB是很多开发者和系统管理员的日常任务。本篇将详细介绍如何在Linux系统上安装MongoDB,以...
如果收到此错误: /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...
Redmine 是一个开源的项目管理工具,主要用于跟踪和管理软件开发过程中的问题、任务和资源。这个`redmine-3.2.8.tar.gz`压缩包是Redmine的一个特定版本,即3.2.8,它针对的是CentOS操作系统。在安装Redmine于CentOS...
在"WebServer_SourceCode_Ruby-master"这个文件夹中,我们通常会找到项目的主文件,如`server.rb`或`app.rb`,这是服务器的入口点,包含了启动服务器和处理请求的主要逻辑。此外,`config`目录可能包含了配置信息,...
- 运行Ruby安装程序,确保在安装过程中勾选“Add Ruby executables to your PATH”和“Associate .rb and .rbw files with this interpreter”选项。 - 完成安装后,通过“Start Command Prompt with Ruby”启动...