Rails 7 | GET 请求在生产中不起作用

问题描述 投票:0回答:1

我有一个 Rails 7 应用程序,当用户单击按钮时,它会重定向到支付网关,通过 GET 请求进行在线支付,在我的开发模式下,在本地计算机(在 localhost:3000 上),它工作得很好。

orders_controller.rb

def payE
        @payment_response = Easebuzz::Payment.initiate({
          "txnid" => "#{@order.id}",
          "amount" => amount.to_f,
          "firstname" => current_user.name,
          "email" => current_user.email,
          "phone" => current_user.phone_number,
          "productinfo" => "Payment for Order#{@order.id}",
          "surl" => "http://localhost:3000/orders/#{@order.id}/successE",
          "furl" => "http://localhost:3000/orders/#{@order.id}/failedTransaction",
        })

        if @payment_response['status'] == 1
          data = @payment_response['data']
          redirect_to("https://testpay.easebuzz.in/pay/#{data}", allow_other_host: true, status: 303)
        end

       puts @payment_response
end

路线.rb:

resources :orders do
  member do
      get '/payE', to: 'orders#payE'
  end
 end

index.html.erb

<%= link_to payE_order_path(order) %>

正如我所说,在开发模式下,它工作得非常好,但是当我在生产中使用它时,我使用aws ec2、apache和passenger部署了它,并且刚刚改变了

def payE
     .....
          "surl" => "http://(Main Domain.in)/orders/#{@order.id}/successE",
          "furl" => "http://(Main Domain.in)/orders/#{@order.id}/failedTransaction",
     ......

     .......
          redirect_to("https://pay.easebuzz.in/pay/#{data}", allow_other_host: true, status: 303) 
          #using pay.easebuzz in production
       .....
  puts @payment_response
end

GET 请求显示

(OrdersController#payE is missing a template for request formats: text/html)

但是在开发中,它工作得非常好,为什么它不在生产中执行 GET 请求??

而且

puts @payment_response
在日志中没有显示任何内容。

所以我的主要问题是 GET 请求(order_controller.rb 中的 payE 方法)在开发中工作,但是在生产中使用时,它不起作用,它没有读取 Easebuzz::Payment.initiate

我还从 payE 从 GET 更改为 POST 请求,看看它是否会

puts @payment_response
,但它在日志中显示
No template found for OrdersController#payE

我在这里做什么蠢事?

ruby-on-rails ruby get payment-gateway ruby-on-rails-7
1个回答
0
投票

因此,它在模板问题上出错的事实意味着

@payment_response['status'] == 1
不正确。
puts @payment_response
可能无法正常工作,因为 STDOUT 未与生产中的日志绑定,您可以尝试
Rails.logger.debug @payment_response.inspect

因此,这应该可以帮助您查看响应,我最好的猜测是您的

Easebuzz
配置未正确设置以使用正确的商家密钥或其他内容进行生产,但是一旦您看到日志,您就会了解更多信息。

最后,你的代码应该更优雅地处理错误,即。您应该有一个用于该检查的

else
,其中包含带有 Flash 错误的本地重定向,或者可能是向用户显示错误的模板。

© www.soinside.com 2019 - 2024. All rights reserved.