每当我尝试启动服务器时,都会收到此错误...
where
application.rb中
undefined method `post' for main:Object (NoMethodError)
我将代码块放在错误的位置吗?我认为post "/push" do
Webpush.payload_send(
endpoint: "https://fcm.googleapis.com/gcm/send/eah7hak....",
message: "A message",
p256dh: "BO/aG9nYXNkZmFkc2ZmZHNmYWRzZmFl...",
auth: "aW1hcmthcmFpa3V6ZQ==",
vapid: {
subject: "mailto:sender@example.com",
public_key: ENV['VAPID_PUBLIC_KEY'],
private_key: ENV['VAPID_PRIVATE_KEY']
}
)
end
与app.rb
屏幕截图来自git tutorial:https://github.com/zaru/webpush。
我尝试使用VAPID和宝石application.rb
& webpush
。
的application.js
serviceworker-rails
答案 0 :(得分:1)
将其添加到控制器中的简单示例。
首先,使用动作的名称创建控制器(我将使用push
,按照您的示例):
$ rails g controller Test push
这将创建一个测试控制器,并将更新您的路线:
# app/controllers/test_controller.rb
class TestController < ApplicationController
def push
end
end
# config/routes.rb
get 'test/push'
接下来使用您要添加的代码更新控制器:
class TestController < ApplicationController
def push
Webpush.payload_send(
message: params[:message],
endpoint: params[:subscription][:endpoint],
p256dh: params[:subscription][:keys][:p256dh],
auth: params[:subscription][:keys][:auth],
vapid: {
subject: "mailto:sender@example.com",
public_key: ENV['VAPID_PUBLIC_KEY'],
private_key: ENV['VAPID_PRIVATE_KEY']
}
)
end
end
并更新您的路线以使用post
代替get
:
post 'test/push'
这样你就可以使用POST yoursite / test / push 端点(就像app.rb
的例子一样)。