2016-03-08 98 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应用程序运行。