部署 [已解决] 部署 rails 项目, 遇到问题,求助社区热心朋友

jyootai · 2014年05月28日 · 最后由 jyootai 回复于 2014年05月30日 · 5355 次阅读

背景:1,第一次亲身部署。 2,迫切想看到成果,找点自信。 因为是第一次部署,想大概了解部署的一个过程,于是找了找 rails 的部署方案,最终找到了这一篇: https://github.com/ruby-china/ruby-china/wiki/Ubuntu-12.04-%E4%B8%8A%E4%BD%BF%E7%94%A8-Nginx-Passenger-%E9%83%A8%E7%BD%B2-Ruby-on-Rails 然后一步一步的跟着走,期间有遇到问题,最终通过 Google 解决了,之后来到了 Welcome to Nginx这一步,于是很清楚的知道前面的操作应该没错,但有一个问题,怎么没有看到自己的网站。然后又找了找问题,最后出现了这个错误:

查看错误日志:

感觉没有报错……

不知道是什么原因,第一次没有这方面经验,所以求助社区朋友

nginx 基本正常,404 是没找到文件,你要给出 url,查一下对应的文件

nginx

server {
    listen 80;
    server_name chaxun.com;
    location / {
        proxy_pass   http://127.0.0.1:3000;
    }
}

进到 rails 项目里

bundle exec puma  -p 3000 -e production -d config.ru

测试的时候这么启动的,正常应该加到自启动。

#2 楼 @liwei78 如链接上所说: 在浏览器打开服务器的 IP 地址或域名,应该看到你的网站在运行。 我用的是 Internet IP 不是本地 IP,这样对吗?当加了 location 后,重启 sudo service nginx restart,在刷新还是 404

看 nginx 的 error.log,一般在 /usr/local/nginx/logs/error.log

#1 楼 @chenge 配置中有这一段: root /var/www/jyootai.com/computer/public; 这样不知道对不对,还有我不明白的是 public 这个文件夹下只有几个报错的页面,为什么要指定到 public 这个文件

6 楼 已删除

#4 楼 @liwei78 不是吧,我的是在 /var/log/nginx/error.log ,日志记录的依然和上面贴那张图类似。

#5 楼 @jyootai html 文件都在 public 下的。所以提醒你贴出你的 url,http://?

#7 楼 @jyootai 哦,我没有审题,应该是按照 6 楼说的,检查下 passenger。只有 passenger 启动的 rails,才指向 public 目录。

#5 楼 @jyootai 修改为

root /var/www/jyootai.com/public

#10 楼 @kidult 我的项目名称是 computer 😄

#11 楼 @jyootai 看错一个单词,你在 public 放个 html,看看能不能访问,然后看 nginx 日志生成什么

#9 楼 @liwei78 #12 楼 @kidult 在 public 里放个 html 是一样的效果。难道是因为通过链接上的方式安装没有编译 nginx,还需要编译?

不经 nginx 访问 http://ip:3000 正常不?

Passenger 一定要重新编译 nginx 或者 重新安装一个 nginx wiki 上没有写明

如果你改了 Nginx 的配置,最好先运行 sudo service nginx reload,再运行 sudo service nginx restart

#14 楼 @gelosie #9 楼 @liwei78 #15 楼 @kidult #16 楼 @cameo 当我运行rails s后就可以了,难道部署后的网站和开发环境一样都需要在服务器端运行这个?

#15 楼 @kidult Passenger 有官方 deb 包,不用编译。

楼主把你的所有配置贴出来。

我也不知道怎么回答了,lz 把配置笔记贴出来吧。写笔记真的很重要。

#18 楼 @Rei #19 楼 @liwei78 /etc/nginx/sites-enabled/jyootai.com.conf

server {
  listen 80  default;
  server_name jyootai.com;
  root /var/www/jyootai.com/computer/public;
  passenger_enabled on;
}

/etc/nginx/nginx.conf

#user jyootai;
worker_processes 4;
pid /var/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;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        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";

         passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
         passenger_ruby /home/deploy/.rvm/wrappers/ruby-2.0.0-p247/ruby;

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

这样配置过后,需要运行 rails srails s -e production 后才能输入 http://ip:3000 打开网站

#20 楼 @jyootai 访问一下网站,贴日志尾部内容 /var/log/nginx/access.log /var/log/nginx/error.log

别管 rails s 和 3000 端口,不关事。

以防万一:修改 nginx 配置之后重启过了没? sudo service nginx restart

#21 楼 @Rei

/var/log/nginx/access.log

/var/log/nginx/error.log

删掉 /etc/nginx/sites-enabled/default,然后重启 nginx。

或者不删除 default,把 /etc/nginx/sites-enabled/jyootai.com.conf 里面的 listen 80 default; 修改成 listen 80;,这样只能通过域名访问,看你喜欢。

#25 楼 @Rei 我已经删了…… 之后重启 nginx,出现We're sorry, but something went wrong,然后看了日志:

好像是 passenger_ruby 这个路径有错,这个路劲到底是什么路劲?

#26 楼 @jyootai 你的用户安装的 rvm 包裹的 ruby 路径。如果用户名是 deploy,要用的 ruby 已经设为 default,那么最简单的就是

passenger_ruby /home/deploy/.rvm/wrappers/default/ruby;

#25 楼 @Rei 问题解决了,感谢感谢

#27 楼 @Rei 项目部署已能正常运行,点击其它按钮时均正常,但点击搜索按钮时就会报错

Elasticsearch::Transport::Transprot::Errors::ServiceUnavailable in Topics#search

 {"error":"ClusterBlockException[blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];[SERVICE_UNAVAILABLE/2/no master];]","status":503}

我知道这应该是 elasticsearch 的问题,后台也在运行,不知道哪出了错

#29 楼 @jyootai 没处理过,看上去就是 elasticsearch 连不上,直接访问 9200 端口看看什么提示?

#30 楼 @Rei 访问 9200 端口:

{
  "status" : 503,
  "name" : "Antonio",
  "version" : {
    "number" : "1.1.2",
    "build_hash" : "e511f7b28b77c4d99175905fac65bffbf4c80cf7",
    "build_timestamp" : "2014-05-22T12:27:39Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

在自己机子上就没有这样的错,这就是服务器端 elasticsearch 出了问题吧

#31 楼 @jyootai 搜 elasticsearch 503 吧,我也不知道。

#32 楼 @Rei 到处找了一下问题的解决方案,发现这个比较有用 http://stackoverflow.com/questions/18588927/elasticsearch-503-error-when-checking-server-status

但现在 503 -> 404 😔 ActionView::Template::Error ([404] {"error":"IndexMissingException[[topics] missing]","status":404}):

#33 楼 @jyootai rake elasticsearch:import:all

#34 楼 @Rei 最后解决了,rake environment elasticsearch:import:model CLASS='Topic' FORCE=y

需要 登录 后方可回复, 如果你还没有账号请 注册新账号