首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >独角兽无法写入pid文件

独角兽无法写入pid文件
EN

Stack Overflow用户
提问于 2012-01-03 06:43:14
回答 3查看 26.1K关注 0票数 18

我正在使用Capistrano将Ruby on Rails应用程序部署到Linode VPS。我使用Unicorn作为应用服务器,使用Nginx作为代理。我的问题是,由于一个明显的权限问题,我无法启动Unicorn,但我很难找到它。

使用以下Capistrano任务启动Unicorn:

代码语言:javascript
复制
task :start, :roles => :app, :except => { :no_release => true } do
    run <<-CMD
      cd #{current_path} && #{unicorn_bin} -c #{unicorn_config} -E #{rails_env} -D
    CMD
end

我返回了ArgumentError,表明pid文件的路径是不可写的。

代码语言:javascript
复制
cap unicorn:start                                                                           master [d4447d3] modified
  * executing `unicorn:start'
  * executing "cd /home/deploy/apps/gogy/current && /home/deploy/apps/gogy/current/bin/unicorn -c /home/deploy/apps/gogy/shared/config/unicorn.rb -E production -D"
    servers: ["66.228.52.4"]
    [66.228.52.4] executing command
 ** [out :: 66.228.52.4] /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:88:in `reload':
 ** [out :: 66.228.52.4] directory for pid=/home/deploy/apps/shared/pids/unicorn.pid not writable (ArgumentError)
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:84:in `each'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:84:in `reload'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:65:in `initialize'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:102:in `new'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:102:in `initialize'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/bin/unicorn:121:in `new'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/bin/unicorn:121
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/current/bin/unicorn:16:in `load'
 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/current/bin/unicorn:16
 ** [out :: 66.228.52.4] master failed to start, check stderr log for details
    command finished in 1032ms
failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'default' -c 'cd /home/deploy/apps/gogy/current && /home/deploy/apps/gogy/current/bin/unicorn -c /home/deploy/apps/gogy/shared/config/unicorn.rb -E production -D'" on 66.228.52.4

最后,这里是我的Unicorn配置文件(unicorn.rb)的相关部分。

代码语言:javascript
复制
# Ensure that we're running in the production environment
rails_env = ENV['RAILS_ENV'] || 'production'

# User to run under
user 'deploy', 'deploy'

# We will spawn off two worker processes and one master process
worker_processes 2

# set the default working directory
working_directory "/home/deploy/apps/gogy/current"

# This loads the application in the master process before forking
# worker processes
# Read more about it here:
# http://unicorn.bogomips.org/Unicorn/Configurator.html
preload_app true

timeout 30

# This is where we specify the socket.
# We will point the upstream Nginx module to this socket later on
listen "/home/deploy/apps/shared/sockets/unicorn.sock", :backlog => 64

pid "/home/deploy/apps/shared/pids/unicorn.pid"

# Set the path of the log files 
stderr_path "/home/deploy/apps/gogy/current/log/unicorn.stderr.log"
stdout_path "/home/deploy/apps/gogy/current/log/unicorn.stdout.log"

我在'deploy‘用户和组下使用Capistrano进行部署,这也是Unicorn应该运行的用户和组。

有人知道为什么Unicorn不能写出pid文件吗?任何帮助都将非常感谢!

  • Mike
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-03 09:20:35

实际上,错误消息已经告诉您原因:

pid的

目录=/home/deploy/apps/shared/pids/unicorn.pid不可写

那么,目录/home/deploy/apps/shared/pids是否存在呢?如果没有,您应该调用mkdir来创建它。

票数 36
EN

Stack Overflow用户

发布于 2013-07-09 03:34:10

独角兽进程正在后台运行(-d),请键入

代码语言:javascript
复制
ps aux | grep unicorn

并终止正在运行的独角兽进程,然后再次启动。

票数 2
EN

Stack Overflow用户

发布于 2014-01-08 09:40:03

在capistrano 3中;如果我们将角色更改为: all,则在部署capistrano时;WARN [SKIPPING] No Matching Host for .....和部署后所有符号链接不再工作。如果tmp/pids文件夹在符号链接数组中,则unicorn找不到tmp/pids文件夹,并显示unicorn.pid不可写。

所以我们必须使用;roles: %w{web app db}而不是roles :all

Production.rb上的示例服务器行;

代码语言:javascript
复制
 `server 'YOUR_SERVER_IP', user: 'YOUR_DEPLOY_USER', roles: %w{web app db}, ssh_options: { forward_agent: true }`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8706088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档