mongrel启动问题的解决方案

简介:

如果使用Mongrel来部署Rails,就不可避免的使用
  1. mongrel_rails start -C mongrel.config  
这里mongrel.config是mongrel的配置文件,可以为:
  1. —  
  2.  :config_script:  
  3.  :environment: development  
  4.  :pid_file: log/mongrel.pid  
  5.  :num_processors: 1024  
  6.  :docroot: public  
  7.  :timeout: 0  
  8.  :host: 0.0.0.0  
  9.  :mime_map:  
  10.  :port: 3000  
  11.  :daemon: false  
  12.  :cwd: /home/linux/projects/mongrel/testapp  
  13.  :includes:  
  14.  - mongrel  
  15.  :debug: false  
  16.  :log_file: log/mongrel.log  
然后到app的根目录下运行上述的命令,恭喜您,你启动成功了.
但是有个问题,如果我不在app的根目录下运行呢?系统会给出我们信息:
  1. !!! Path to log file not valid: log/mongrel.log  
  2. mongrel::start reported an error. Use mongrel_rails mongrel::start -h to get help.  
第一眼看见这个错误,觉得非常简单,Mongrels的创始人给出的答案是将相对路径改为绝对路径.
也许上述的方法能解决问题,但是我相信仍然有一种情况:即使改为绝对路径,还是出现同样的错误.
如果发生上述的错误应该怎么办?
不幸的是,上述的问题我已经碰见过,很长时间不得要领.文档看破皮了,还是不能运行.不得已,打开mongrels的源代码看看.最后发现需要指定工作目录,因为工作目录是在log之前验证的.
摘录一段代码:
ruby 代码
  1. module Mongrel  
  2.   class Start < GemPlugin::Plugin "/commands"  
  3.     include Mongrel::Command::Base  
  4.   
  5.     def configure  
  6.       options [  
  7.         ["-e""–environment ENV""Rails environment to run as", :@environment, ENV[’RAILS_ENV’] || "development"],  
  8.         ["-d""–daemonize""Run daemonized in the background", :@daemonfalse],  
  9.         [’-p’, ’–port PORT’, "Which port to bind to", :@port, 3000],  
  10.         [’-a’, ’–address ADDR’, "Address to bind to", :@address"0.0.0.0"],  
  11.         [’-l’, ’–log FILE’, "Where to write log messages", :@log_file"log/mongrel.log"],  
  12.         [’-P’, ’–pid FILE’, "Where to write the PID", :@pid_file"log/mongrel.pid"],  
  13.         [’-n’, ’–num-procs INT’, "Number of processors active before clients denied", :@num_procs, 1024],  
  14.         [’-t’, ’–timeout TIME’, "Timeout all requests after 100th seconds time", :@timeout, 0],  
  15.         [’-m’, ’–mime PATH’, "A YAML file that lists additional MIME types", :@mime_mapnil],  
  16.         [’-c’, ’–chdir PATH’, "Change to dir before starting (will be expanded)", :@cwdDir.pwd],  
  17.         [’-r’, ’–root PATH’, "Set the document root (default ’public’)", :@docroot"public"],  
  18.         [’-B’, ’–debug’, "Enable debugging mode", :@debugfalse],  
  19.         [’-C’, ’–config PATH’, "Use a config file", :@config_filenil],  
  20.         [’-S’, ’–script PATH’, "Load the given file as an extra config script", :@config_scriptnil],  
  21.         [’-G’, ’–generate PATH’, "Generate a config file for use with -C", :@generatenil],  
  22.         [, ’–user USER’, "User to run as", :@usernil],  
  23.         [, ’–group GROUP’, "Group to run as", :@groupnil],  
  24.         [, ’–prefix PATH’, "URL prefix for Rails app", :@prefixnil]  
  25.       ]  
  26.     end  
  27.   
  28.     def validate  
  29.       @cwd = File.expand_path(@cwd)  
  30.       valid_dir? @cwd"Invalid path to change to during daemon mode: #@cwd"  
  31.   
  32.       # Change there to start, then we’ll have to come back after daemonize  
  33.       Dir.chdir(@cwd)  
  34.   
  35.       valid?(@prefix[0].chr == "/" && @prefix[-1].chr != "/""Prefix must begin with / and not end in /"if @prefix  
  36.       valid_dir? File.dirname(@log_file), "Path to log file not valid: #@log_file"  
  37.       valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #@pid_file"  
  38.       valid_dir? @docroot"Path to docroot not valid: #@docroot"  
  39.       valid_exists? @mime_map"MIME mapping file does not exist: #@mime_map" if @mime_map  
  40.       valid_exists? @config_file"Config file not there: #@config_file" if @config_file  
  41.       valid_dir? File.dirname(@generate), "Problem accessing directory to #@generate" if @generate  
  42.       valid_user? @user if @user  
  43.       valid_group? @group if @group  
  44.   
  45.       return @valid  
  46.     end  
  47.   
  48.     def run  
  49.       # Config file settings will override command line settings  
  50.       settings = { :host => @address,  :port => @port:cwd => @cwd,  
  51.         :log_file => @log_file:pid_file => @pid_file:environment => @environment,  
  52.         :docroot => @docroot:mime_map => @mime_map:daemon => @daemon,  
  53.         :debug => @debug:includes => ["mongrel"], :config_script => @config_script,  
  54.         :num_processors => @num_procs:timeout => @timeout,  
  55.         :user => @user:group => @group:prefix => @prefix:config_file => @config_file  
  56.       }  
  57.   
  58.      #……  
  59.   
  60.       if @config_file  
  61.         settings.merge! YAML.load_file(@config_file)  
  62.         STDERR.puts "** Loading settings from #{@config_file} (they override command line)." unless settings[:daemon]  
  63.       end  
  64.   
  65.       config = Mongrel::Rails::RailsConfigurator.new(settings) do  
  66.         if defaults[:daemon]  
  67.           if File.exist? defaults[:pid_file]  
  68.             log "!!! PID file #{defaults[:pid_file]} already exists.  Mongrel could be running already.  Check your #{defaults[:log_file]} for errors."  
  69.             log "!!! Exiting with error.  You must stop mongrel and clear the .pid before I’ll attempt a start."  
  70.             exit 1  
  71.           end  
  72.   
  73.           daemonize  
  74.           log "Daemonized, any open files are closed.  Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info."  
  75.           log "Settings loaded from #{@config_file} (they override command line)." if @config_file  
  76.         end  
看看上面的代码就非常清楚了.
那么如何解决,可以这样:
  1. mongrel_rails  start -c youapp/path/to -C mongrel.config  
这样就OK了.
扩展应用:可以配置为服务自动启动.




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/68281,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Android开发 Windows
一键启动Appium自动化环境
一键启动Appium自动化环境
37 0
|
4月前
|
监控 前端开发 应用服务中间件
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
414 0
|
9月前
|
监控
WGCLOUD:企业级开源监控解决方案 - 如何关闭下发指令
有时候我们不需要下发指令功能,希望可以关闭这个模块,其实非常简单 我们只需要修改server配置文件server/config/application.yml的配置项即可 如下,只需要将shellToRun的配置值改成no就好啦 然后我们重启server就生效了
|
11月前
|
存储 小程序 Shell
【平台开发】技术整合思考(一)——启动配置
【平台开发】技术整合思考(一)——启动配置
80 0
|
11月前
|
消息中间件 NoSQL 前端开发
应用系统服务安装全过程(从基础搭建框架到部署运行)
应用系统服务安装全过程(从基础搭建框架到部署运行)
141 0
应用系统服务安装全过程(从基础搭建框架到部署运行)
|
消息中间件 Java Kafka
数据治理二-Atlas2.1 100%安装启动成功方法
数据治理二-Atlas2.1 100%安装启动成功方法
417 0
|
Linux Windows
麒麟部署平台应用启动和停止脚本模板
麒麟部署平台ISV操作手册
552 0
|
安全 Cloud Native 网络安全
启动云计算事件响应策略的5个步骤
如今,数据转储、勒索软件攻击、恶意软件攻击事件已屡见不鲜,这意味着事件管理策略已成为必要选项。
|
关系型数据库 MySQL Python
mysql安装出现应用程序无法正常启动(oxc000007b)的解决方案
原文:mysql安装出现应用程序无法正常启动(oxc000007b)的解决方案 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
2704 0