2016-03-08 99 views
3

我只是將Capistrano部署到Linux Server(14.04),Nginx,PHP5-FPM(用於phpMyAdmin),MySQL,Passenger的服務器上。Rails應用程序Nginx/Passenger錯誤

一切都很好,但是當我嘗試從瀏覽器訪問rails應用程序時出現錯誤。我去檢查日誌Nginx的,我得到以下幾點:

App 15973 stdout: 
App 15973 stderr: [passenger_native_support.so] trying to compile for the current user (deploy) and Ruby interpreter... 
App 15973 stderr:  (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable) 
App 15973 stderr:  Warning: compilation didn't succeed. To learn why, read this file: 
App 15973 stderr:  /tmp/passenger_native_support-a97tab.log 
App 15973 stderr: [passenger_native_support.so] not downloading because passenger wasn't installed from a release package 
App 15973 stderr: [passenger_native_support.so] will not be used (can't compile or download) 
App 15973 stderr: --> Passenger will still operate normally. 
App 16021 stdout: 

然後:

$cat /tmp/passenger_native_support-a97tab.log 

# current user is: deploy 
# mkdir -p /usr/lib/buildout/ruby/ruby-2.2.1-x86_64-linux 
Encountered permission error, trying a different directory... 
------------------------------- 
# mkdir -p /home/deploy/.passenger/native_support/5.0.26/ruby-2.2.1-x86_64-linux 
# cd /home/deploy/.passenger/native_support/5.0.26/ruby-2.2.1-x86_64-linux 
# /home/deploy/.rbenv/versions/2.2.1/bin/ruby /usr/lib/src/ruby_native_extension/extconf.rb 
/home/deploy/.rbenv/versions/2.2.1/bin/ruby: No such file or directory -- /usr/lib/src/ruby_native_extension/extconf.rb (LoadError) 

這有什麼錯呢?

這是我的Nginx的默認文件:

# Default server configuration 
# 
server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    # SSL configuration 
    # 
    # listen 443 ssl default_server; 
    # listen [::]:443 ssl default_server; 
    # 
    # Self signed certs generated by the ssl-cert package 
    # Don't use them in a production server! 
    # 
    # include snippets/snakeoil.conf; 

    # root /usr/share/nginx/html; 

    # Add index.php to the list if you are using PHP 
    index index.html index.htm index.php index.nginx-debian.html; 

    server_name _; 

    passenger_enabled on; 
     rails_env development; 
     root   /home/deploy/highschool/current/public; 

    location/{ 
     # First attempt to serve request as file, then 
     # as directory, then fall back to displaying a 404. 
     try_files $uri $uri/ =404; 
    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
      root /usr/share/nginx/html; 
    } 

    location ~ \.php$ { 
      try_files $uri =404; 
      fastcgi_split_path_info ^(.+\.php)(/.+)$; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      include fastcgi_params; 
    } 
} 

而且我Nginx.conf

user www-data; 
worker_processes 4; 
pid /run/nginx.pid; 

events { 
    worker_connections 768; 
    # multi_accept on; 
} 

http { 

    ## 
    # Basic Settings 
    ## 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 

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


    ## 
    # Logging Settings 
    ## 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    ## 
    # Gzip Settings 
    ## 

    gzip on; 
    gzip_disable "msie6"; 

    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 

    ## 
    # Phusion Passenger config 
    ## 
    # Uncomment it if you installed passenger or passenger-enterprise 
    ## 

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; 
    passenger_ruby /home/deploy/.rbenv/shims/ruby; 

    # passenger_ruby /usr/bin/passenger_free_ruby; 

    ## 
    # Virtual Host Configs 
    ## 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

我用RBENV的Ruby版本。

對不起,我的英文。

+0

我也面臨同樣的問題,從過去的一週。 –

+0

我使用https://github.com/sandrew/from-scratch進行全新安裝時遇到了同樣的問題。原來乘客仍然試圖使用passenger_ruby/usr/bin/passenger_free_ruby;因爲我已經定義了兩次。不知道這是否是我所做的,但是一旦我刪除了雙項,並重新啓動了一切開始工作。 –

+0

@CoryLoken 我設法糾正錯誤並提出我的申請。 – Dvex

回答

1

我找到了解決方案。

在我的服務器中,我運行了以下命令到我的Rails應用程序中:$ passenger-config build-native-support。 編譯正確,並顯示ruby_native_extension/extconf.rbruby_native_extension目錄的真正路徑。

我只創建一個從/usr/lib/src/ruby_native_extension目錄的符號鏈接並重新啓動Nginx。

當我這樣做的錯誤消失,但然後登錄(設計)不起作用,總是得到404錯誤。 因此,(如果在任何情況下發生)我添加了一些線路專門爲路線sign_in。

在我的Nginx的默認文件我增加了以下內容:

location /users/sign_in { 
    passenger_enabled on 
} 

並編輯:

location/{ 
    # First attempt to serve request as file, then 
    # as directory, then fall back to displaying a 404. 
    passenger_enabled on 
    try_files $uri $uri/ =404; 
} 

而且隨着這些變化,我的Rails應用程序運行。