疑问一 tcp socket 和 unix socket 差别 的问题
我抄配置用 unix socket 失败 改用 tcp socket 却成功,不知道原因是什么 虽然这样搞定一个 app,但是第二个 app 就没招了
vim /home/rails/hellworld/config/unicorn.rb
module Rails
class <<self
def root
File.expand_path("../..", __FILE__)
end
end
end
puts Rails.root
rails_env = ENV["RAILS_ENV"] || "production"
preload_app true
working_directory Rails.root
pid "#{Rails.root}/tmp/pids/unicorn.pid"
stderr_path "#{Rails.root}/log/unicorn.log"
stdout_path "#{Rails.root}/log/unicorn.log"
listen 5000, :tcp_nopush => false #
listen "/tmp/unicorn.ruby-china.sock"
worker_processes 6
timeout 120
if GC.respond_to?(:copy_on_write_friendly=)
GC.copy_on_write_friendly = true
end
before_exec do |server|
ENV["BUNDLE_GEMFILE"] = "#{Rails.root}/Gemfile"
end
before_fork do |server, worker|
old_pid = "#{Rails.root}/tmp/pids/unicorn.pid.oldbin"
if File.exists?(old_pid) && server.pid != old_pid
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
puts "Send 'QUIT' signal to unicorn error!"
end
end
end
listen 5000, :tcp_nopush => false # 这个 listen 5000 是咋回事,我看不少 listen 3000,随意指定一个不冲突端口都可以吧 我测试 5001 5002 都可以
我 tmp 下创建了 listen "/tmp/unicorn.ruby-china.sock" chown www:wwww 也 chmod 777 了 nginx 也
upstream unicorn_server {
server unix:/tmp/unicorn.ruby-china.sock fail_timeout=0;
}
/usr/local/rvm/gems/ruby-1.9.3-p374/gems/unicorn-4.6.2/lib/unicorn/socket_helper.rb:134:in `bind_listen': socket=/tmp/ruby-china.sock specified but it is not a socket! (ArgumentError)
```ruby
后来我想起了tcp socket,
```ruby
listen "/tmp/unicorn.ruby-china.sock" 替换为 listen '127.0.0.1:8080'
nginx.conf 更改 upstream
upstream unicorn_app1{
server 127.0.0.1:8080 fail_timeout=0;
}
然后 RAILS_ENV=production bundle exec unicorn_rails -c config/unicorn.rb -E production -D 第一 app 正常了 问题是 我不知道为咋 unix socket 不行,tcp socket 却可以,发生了什么问题??? 是我 nginx 编译问题,还是我配置出问题?
问题 2 用 tcp socket 如何跑多个运用 直接复制 app1 的会变成访问两个域名,都跑到第一个运行的 app 上
我尝试修改第二 app2 unicorn.rb
listen 5077, :tcp_nopush => false #用不同端口,这个端口好像随便不冲突的都可以
listen '127.0.0.1:3000' #换一个3000的
nginx.conf app2
upstream unicorn_app2{
server 127.0.0.1:3000 fail_timeout=0;
}
然后 RAILS_ENV=production bundle exec unicorn_rails -c config/unicorn.rb -E production -D
现在是第二个 app 正常访问,但是内容跑到第一个上面去 同时第一个 app 不正常了 “We're sorry, but something went wrong.”
问题就是 用 tcp socket 方式如何设置跑多个运用 一台服务器上,127.0.0.1 的除了换端口不知道用什么办法 求助