Pusher 未在 Heroku Rails 应用程序上触发,但在 localhost:3000 上工作正常
Posted
技术标签:
【中文标题】Pusher 未在 Heroku Rails 应用程序上触发,但在 localhost:3000 上工作正常【英文标题】:Pusher not triggering on Heroku Rails app, but works fine on localhost:3000 【发布时间】:2014-06-22 10:23:24 【问题描述】:我在 Ruby on Rails 应用程序上学习 Pusher,并在用户单击按钮时设置它,它提交表单以更新对象,然后触发 Pusher 事件发送警报并更改所有窗口监听的背景颜色在那个频道上。
我的站点在我的本地服务器 localhost:3000 和 Heroku 上运行。在 localhost:3000 上,这就像一个魅力 - 当我打开在本地和 Heroku 上运行该站点的窗口时,我单击本地站点上的按钮,所有窗口都会收到警报并更新背景颜色。
但是,当我在 Heroku 上尝试相同的操作时,没有一个窗口会收到警报或更改颜色。我查看了 Pusher 上的调试控制台,它显示已建立连接,但未显示发送的 API 请求:
Subscribed 35329.28868505 Channel: client-open 23:52:33
Connection 35329.28868505 Origin: http://testing-pusher.herokuapp.com 23:52:33
Disconnection 35303.28886132 Channels: client-open, Lifetime: 107.70291038s 23:52:32
根据Heroku's help page,我已经安装了 pusher gem 和插件。
这是在我的switches#update
中运行的触发器:
@switch.update(color: params[:switch][:color])
Pusher['client-open'].trigger('new_message', :color => @switch.color)
在 application.html.erb 上运行的监听器/绑定:
<script type="text/javascript" charset="utf-8">
$(function()
Pusher.log = function(message)
if (window.console && window.console.log)
window.console.log(message);
;
var pusher = new Pusher('my_pusher_key'); // This has my actual key in it
var channel = pusher.subscribe('client-open');
channel.bind('new_message', function(data)
alert("I'm going to change your background color to #"+data.color);
$("#appended").append("I'm going to change your background color to "+data.color);
$(".color").css('background-color', '#'+data.color);
);
// Some useful Pusher debug msgs
pusher.connection.bind('connecting', function()
$('div#status').text('Connecting to Pusher...');
);
pusher.connection.bind('connected', function()
$('div#status').text('Connected to Pusher!');
);
pusher.connection.bind('failed', function()
$('div#status').text('Connection to Pusher failed :(');
);
channel.bind('subscription_error', function(status)
$('div#status').text('Pusher subscription_error');
);
);
</script>
我在同一个文件的头部有这两个脚本:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://js.pusherapp.com/2.0/pusher.min.js"></script>
如何让 Pusher 在 Heroku 上正确触发?
编辑:这里是 Heroku 日志。没有我能说出的错误:
2014-05-07T18:40:46.291870+00:00 heroku[router]: at=info method=POST path=/switches/1 host=testing-pusher.herokuapp.com request_id=f3f9e17c-086b-4639-88ba-4a406828c4e7 fwd="24.20.217.80" dyno=web.1 connect=2ms service=72ms status=302 bytes=942
2014-05-07T18:40:46.224270+00:00 app[web.1]: Started PATCH "/switches/1" for 24.20.217.80 at 2014-05-07 18:40:46 +0000
2014-05-07T18:40:46.224278+00:00 app[web.1]: Started PATCH "/switches/1" for 24.20.217.80 at 2014-05-07 18:40:46 +0000
2014-05-07T18:40:46.227649+00:00 app[web.1]: Processing by SwitchesController#update as HTML
2014-05-07T18:40:46.415613+00:00 app[web.1]: Started GET "/" for 24.20.217.80 at 2014-05-07 18:40:46 +0000
2014-05-07T18:40:46.455745+00:00 app[web.1]: Completed 200 OK in 28ms (Views: 19.0ms | ActiveRecord: 1.4ms)
2014-05-07T18:40:46.230175+00:00 app[web.1]: Processing by SwitchesController#update as HTML
2014-05-07T18:40:46.424400+00:00 app[web.1]: Processing by SwitchesController#show as HTML
2014-05-07T18:40:46.451080+00:00 app[web.1]: Rendered switches/_form.html.haml (7.4ms)
2014-05-07T18:40:46.230262+00:00 app[web.1]: Parameters: "utf8"=>"✓", "authenticity_token"=>"nqhkV37GG6ym+pM7j+Bdxh3aBltTLfNpPa6cnE6b92U=", "switch"=>"color"=>"c4b6c2", "commit"=>"push me", "id"=>"1"
2014-05-07T18:40:46.230298+00:00 app[web.1]: Parameters: "utf8"=>"✓", "authenticity_token"=>"nqhkV37GG6ym+pM7j+Bdxh3aBltTLfNpPa6cnE6b92U=", "switch"=>"color"=>"c4b6c2", "commit"=>"push me", "id"=>"1"
2014-05-07T18:40:46.287569+00:00 app[web.1]: Redirected to http://testing-pusher.herokuapp.com/
2014-05-07T18:40:46.287617+00:00 app[web.1]: Redirected to http://testing-pusher.herokuapp.com/
2014-05-07T18:40:46.287866+00:00 app[web.1]: Completed 302 Found in 57ms (ActiveRecord: 8.2ms)
2014-05-07T18:40:46.287875+00:00 app[web.1]: Completed 302 Found in 57ms (ActiveRecord: 8.2ms)
2014-05-07T18:40:46.409915+00:00 app[web.1]: Started GET "/" for 24.20.217.80 at 2014-05-07 18:40:46 +0000
2014-05-07T18:40:46.423250+00:00 app[web.1]: Processing by SwitchesController#show as HTML
2014-05-07T18:40:46.451349+00:00 app[web.1]: Rendered switches/show.html.haml within layouts/application (12.7ms)
2014-05-07T18:40:46.446554+00:00 app[web.1]: Rendered switches/_form.html.haml (7.4ms)
2014-05-07T18:40:46.452492+00:00 app[web.1]: Completed 200 OK in 28ms (Views: 19.0ms | ActiveRecord: 1.4ms)
2014-05-07T18:40:46.451312+00:00 app[web.1]: Rendered switches/show.html.haml within layouts/application (12.7ms)
项目现已在 testing-pusher.herokuapp.com 上线。
【问题讨论】:
【参考方案1】:您是否在 Heroku 日志中看到任何错误或消息?
另外,您是否在 Heroku 上尝试过一个简单的测试用例,除了通过 Pusher gem 发送消息之外什么都不做?
【讨论】:
Heroku 日志没有错误。我已经在上面添加了相关日志。我还没有尝试发送消息。从调试控制台看,API 请求甚至没有发生。不过我还是会试试的。 你是如何使用一个简单的测试用例应用程序的,它除了通过 Pusher 发送消息之外什么都不做? 搞定了。environment/production.rb
上缺少环境变量【参考方案2】:
我认为您需要更改 Pusher 应用凭据。
在创建推送应用程序时,您可以选择代表本地区域集群的集群。 例如,“ap3”表示亚太地区(东京),“eu”表示“欧洲”。
所以你最好在部署到服务器时更改你的 Pusher 应用程序。
【讨论】:
【参考方案3】:演出迟到了,但如果其他人遇到这个...... 对我来说,我必须从我的配置中删除这些
const pusher = new Pusher(
appId: 'APP_ID',
key: 'APP_KEY',
secret: process.env.PUSHER_SECRET,
cluster: 'us2',
// these two were causing pusher.trigger to not work on deployed server
// useTLS: true
// encrypted: true
)
【讨论】:
以上是关于Pusher 未在 Heroku Rails 应用程序上触发,但在 localhost:3000 上工作正常的主要内容,如果未能解决你的问题,请参考以下文章
邮件未在 rails 上使用 devise、heroku 和邮戳发送
Heroku 托管 Web 服务的 Juggernaut/Faye 与 Pusher?