Rails Websocket-Rails 部署搞不定, Passenger nginx thin

although2013 · 2015年04月19日 · 最后由 CocaColaCat 回复于 2015年04月20日 · 3708 次阅读

部署 Rails app 时用到了 gem 'websocket-rails'standalone模式 http://128.199.208.206/ 在同一台 ubuntu 14.04 上装的 Redis ,port:6379

JS 用 dispatcher = new WebSocketRails("#{hostname}:3001/websocket"); 出错返回 500

WebSocket connection to 'ws://128.199.208.206/websocket' failed: 
Error during WebSocket handshake: Unexpected response code: 500

命令行 telnet my_server_host 80

GET /websocket HTTP/1.1
Host:128.199.208.206
Connection:Upgrade
Upgrade:WebSocket

会返回一个 类似 development 模式的错误页面:

Mysql2::Error
Access denied for user 'root'@'localhost' (using password: YES)

mysql2 (0.3.18) lib/mysql2/client.rb:70:in `connect'
mysql2 (0.3.18) lib/mysql2/client.rb:70:in `initialize'
activerecord (4.2.0) lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `new'
activerecord (4.2.0) lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `mysql2_connection'
....

==== 我好像搜不到有什么返回 500 值的问题,是不是服务器端的设置有问题 好难,有没有人用过这个 gem,还是你们都用了 faye。。。 找不到什么和这有关的 Log 信息。。 下面是部分配置文件,

#config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  timeout: 5000
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  username: root
  password: 123456789
  database: campusOrders_development

test:
  <<: *default
  database: campusOrders_test

production:
  <<: *default
  database: campusOrders_production
  username: root
  password: 1236******
#config/initializers/websocket_rails.rb
#config.log_level = :debug           (把这个设成 :debug 然后重启 websocket server 和 nginx 好像还是没有什么错误信息)
config.standalone = true
#config.standalone_port = 3001    (确认已经运行在默认端口3001上了)
config.synchronize = false
config.daemonize = true
config.redis_options = {:host => 'localhost', :port => '6379'}
#/etc/nginx/sites-enabled/campusorders.com.conf
server {
    listen 80 default;
    server_name campusorders.com;
    root /var/www/campusorders.com/master/public;
    passenger_enabled on;
    rails_env production;

    location /websocket {
        proxy_pass http://localhost:3001/websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

问题 1,有可能跟 Nginx 的配置有关,建议你查看一下 Nginx 的 error_log,看能否找到线索。 问题 2,log 上看,MySQL 拒绝了 root 用户从 localhost 访问,建议你检查一下 MySQL 的数据库访问权限设置。

你提到会返回一个类似 development 模式的错误页面,说明你的应用运行模式可能是 development,且没有对应 development 模式的数据库,请检查一下是不是应该以 production 模式启动?

试了一下,在 view 里插入 Rails.env.production? 是 production 模式启动的。。 ssh 下 mysql -u root -p可以访问 mysql, RAILS_ENV=production rake db:migrate也能执行, 不知道是不是别的模块也要访问 mysql,但没获得密码,

谢谢,再搞不定我也就算了,也是自己做着玩,第一次用这个 gem。。 @lgn21st

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