2015-10-29 174 views
1

我已經在我的應用程序控制器中聲明瞭全局變量,並且我正在每個http請求上增加它。Rails全局變量:是http請求之間的全局變量共享嗎?

我測試過這個功能,發現全局變量在每個http請求中都有控制權。

我使用nginx作爲Web服務器和乘客作爲應用程序服務器。我讀過很多關於乘客的文章,並且知道乘客爲每個http請求創建進程,每個進程都將擁有自己的全局變量,因此全局變量不能在每個http請求中共享。每個http請求都會有自己的全局變量副本。這是真的嗎?如果是這樣,那麼爲什麼在我的情況下全局變量正在增加每個http請求。

**************************** nginx conf **************** ******************

#user nobody; 
worker_processes 1; 
error_log /var/log/nginx-error.log info; 

#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    passenger_root /home/ubuntu/.rvm/gems/ruby-2.0.0-p598/gems/passenger-5.0.7; 
    passenger_ruby /home/ubuntu/.rvm/gems/ruby-2.0.0-p598/wrappers/ruby; 

    include  mime.types; 
    default_type application/octet-stream; 

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
    #     '$status $body_bytes_sent "$http_referer" ' 
    #     '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    #gzip on; 
    server { 
     listen  80; 
     server_name localhost; 

     #charset koi8-r; 
     passenger_enabled on; 
     client_max_body_size 10000M; 
     #access_log logs/host.access.log main; 

     location/{ 

      index index.html index.htm; 
     } 
     root /var/www/application/Test/current/public; 


     #error_page 404    /404.html; 

     # redirect server error pages to the static page /50x.html 
     # 
     error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
      root html; 
     } 

     # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
     # 
     #location ~ \.php$ { 
     # proxy_pass http://127.0.0.1; 
     #} 

     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
     # 
     #location ~ \.php$ { 
     # root   html; 
     # fastcgi_pass 127.0.0.1:9000; 
     # fastcgi_index index.php; 
     # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
     # include  fastcgi_params; 
     #} 
    } 


    # another virtual host using mix of IP-, name-, and port-based configuration 
    # 
    #server { 
    # listen  8000; 
    # listen  somename:8080; 
    # server_name somename alias another.alias; 

    # location/{ 
    #  root html; 
    #  index index.html index.htm; 
    # } 
    #} 


    # HTTPS server 
    # 
    #server { 
    # listen  443 ssl; 
    # server_name localhost; 

    # ssl_certificate  cert.pem; 
    # ssl_certificate_key cert.key; 

    # ssl_session_cache shared:SSL:1m; 
    # ssl_session_timeout 5m; 

    # ssl_ciphers HIGH:!aNULL:!MD5; 
    # ssl_prefer_server_ciphers on; 

    # location/{ 
    #  root html; 
    #  index index.html index.htm; 
    # } 
    #} 

} 

感謝,

+0

這是一個接近空的主nginx配置。實際的乘客配置在哪裏?我想,我們需要一個'/etc/nginx/conf.d/ *。conf' –

+0

請參閱更新配置文件。 – user2274074

+0

'worker_processes 1' –

回答

1

乘客爲每一個HTTP請求

創建過程中這將是非常效率低下。乘客不這樣做。相反,它會創建一個保持運行並處理請求的工作者池。每個工作人員都將擁有自己的全局變量值,它將在多個請求中更新。

如果您使用線程進行併發,那麼全局變量將在所有工作人員之間共享,因爲它們將處於相同的進程中。

+0

這意味着如果有兩個或更多的工人,那麼我可能會在http請求 – user2274074

+0

@ user2274074上得到不同的全局變量值:是的,這就是我所期望的。 –

+0

http://stackoverflow.com/a/2972610/2274074這個答案表示乘客共享全局變量。 – user2274074