Openshift:在使用 faye 的 WebSocket 握手期间出错
Openshift: Getting error during WebSocket handshake using faye
我在openshift上部署了一个应用程序,我想用web sockets实现一个聊天应用程序,所以我使用了faye。它在本地工作,但在部署到 openshift 时我在服务器上收到握手错误。
这是我的 config.ru 文件:
require ::File.expand_path('../config/environment', __FILE__)
require 'faye'
use Faye::RackAdapter, :mount => '/faye', :timeout => 25
run Rails.application
当我尝试 运行 https://myapp.rhcloud.com/faye.js 时,它正在运行,而且我的应用程序功能也运行良好。但我收到此错误:
WebSocket connection to 'wss://friendsbook-cisinlabs.rhcloud.com/faye' failed
application.js
$(function(){
var faye = new Faye.Client('https://myapp.rhcloud.com/faye');
faye.subscribe("/messages/new", function(data) {
eval(data);
});
});
application.html.erb
<%= javascript_include_tag '//myapp.rhcloud.com/faye.js' %>
message_helper.rb
def broadcast(channel, &block)
message = {:channel => channel, :data => capture(&block)}
uri = URI.parse("https://myapp.rhcloud.com/faye")
Net::HTTP.post_form( uri, :message => message.to_json )
end
messages/index.html.erb
<ul id="chat">
<%= render @messages %>
</ul>
<%= form_for Message.new, :remote => true do |f| %>
<%= f.text_field :content %>
<%= f.submit "Send" %>
<% end %>
messages/create.js.erb
<% broadcast "/messages/new" do %>
$("#chat").append("<%= escape_javascript render(@message) %>");
<% end %>
$("#new_message")[0].reset();
messages/_message.html.erb
<li>
<span class="created_at"><%= message.created_at.strftime("%H:%M") %></span>
<%= message.content %>
</li>
我参考了 Ryan Bates 的这个 railscast 剧集:
http://railscasts.com/episodes/260-messaging-with-faye
我还参考了许多其他链接,但没有任何帮助。
编辑
我在中添加了这段代码。openshift/action_hooks/post_start_ruby
nohup bundle exec rackup config.ru -s thin -E production -o $OPENSHIFT_INTERNAL_IP -p 8443 > $OPENSHIFT_HOMEDIR/diy-0.1/logs/server.log 2>&1 &
现在出现错误:
ReferenceError: Faye is not defined
这就是我在application.js
中定义faye的方式
var faye = new Faye.Client('https://friendsbook-cisinlabs.rhcloud.com:8443/faye
应该是8443端口没有启动,怎么办呢
如果要使用 wss 进行连接,则需要使用端口 8443,而不是端口 443(默认端口)
wss://friendsbook-cisinlabs.rhcloud.com:8443/faye
我在openshift上部署了一个应用程序,我想用web sockets实现一个聊天应用程序,所以我使用了faye。它在本地工作,但在部署到 openshift 时我在服务器上收到握手错误。 这是我的 config.ru 文件:
require ::File.expand_path('../config/environment', __FILE__)
require 'faye'
use Faye::RackAdapter, :mount => '/faye', :timeout => 25
run Rails.application
当我尝试 运行 https://myapp.rhcloud.com/faye.js 时,它正在运行,而且我的应用程序功能也运行良好。但我收到此错误:
WebSocket connection to 'wss://friendsbook-cisinlabs.rhcloud.com/faye' failed
application.js
$(function(){
var faye = new Faye.Client('https://myapp.rhcloud.com/faye');
faye.subscribe("/messages/new", function(data) {
eval(data);
});
});
application.html.erb
<%= javascript_include_tag '//myapp.rhcloud.com/faye.js' %>
message_helper.rb
def broadcast(channel, &block)
message = {:channel => channel, :data => capture(&block)}
uri = URI.parse("https://myapp.rhcloud.com/faye")
Net::HTTP.post_form( uri, :message => message.to_json )
end
messages/index.html.erb
<ul id="chat">
<%= render @messages %>
</ul>
<%= form_for Message.new, :remote => true do |f| %>
<%= f.text_field :content %>
<%= f.submit "Send" %>
<% end %>
messages/create.js.erb
<% broadcast "/messages/new" do %>
$("#chat").append("<%= escape_javascript render(@message) %>");
<% end %>
$("#new_message")[0].reset();
messages/_message.html.erb
<li>
<span class="created_at"><%= message.created_at.strftime("%H:%M") %></span>
<%= message.content %>
</li>
我参考了 Ryan Bates 的这个 railscast 剧集: http://railscasts.com/episodes/260-messaging-with-faye
我还参考了许多其他链接,但没有任何帮助。
编辑
我在中添加了这段代码。openshift/action_hooks/post_start_ruby
nohup bundle exec rackup config.ru -s thin -E production -o $OPENSHIFT_INTERNAL_IP -p 8443 > $OPENSHIFT_HOMEDIR/diy-0.1/logs/server.log 2>&1 &
现在出现错误:
ReferenceError: Faye is not defined
这就是我在application.js
中定义faye的方式var faye = new Faye.Client('https://friendsbook-cisinlabs.rhcloud.com:8443/faye
应该是8443端口没有启动,怎么办呢
如果要使用 wss 进行连接,则需要使用端口 8443,而不是端口 443(默认端口)
wss://friendsbook-cisinlabs.rhcloud.com:8443/faye