I get a “Pending Error” whenever I click on Pay using Payola-Payment Gem (A gem made for Stripe) in my Rails 4.2.1 application

有些话、适合烂在心里 提交于 2020-01-06 03:10:08

问题


Using Payola-Payments Gem to handle Stripe Payments, it's necessary to set Background Worker for your transaction. After setting up Background Worker using ActiveJob, I will get error when I click pay.

Here is it:

Note: Am using Windows Environment (Windows 8) and I believe there is something am doing wrong here. Error Alert Renders on my View:

This seems to be taking too long. Please contact support and give them transaction ID: ook4dp

Here is the generated code from Console

Started POST "/payola/buy/job/excelwithcode-7d492bf330ab66b0eaa61ce2ce277e14" for 127.0.0.1 at 2016-04-25 20:50:26 +0100
Processing by Payola::TransactionsController#create as */*
  Parameters: {"stripeToken"=>"tok_184FksCc1zXXaitaOrD5ELaH", "stripeEmail"=>"neededforpayments@mybusinesstest.com", "authenticity_token"=>"Uod7Ue4XHNcCvayA6G1shiiI43QKoBOrbImnwt0TGFHVlp11WdHaNTcPl/0UyYefcT6foowc30bFdtK0cJuXog==", "product_class"=>"job", "permalink"=>"excelwithcode-7d492bf330ab66b0eaa61ce2ce277e14"}
  Payola::Affiliate Load (1.0ms)  SELECT  "payola_affiliates".* FROM "payola_affiliates" WHERE (lower(code) = lower(NULL))  ORDER BY "payola_affiliates"."id" ASC LIMIT 1
  Job Load (1.0ms)  SELECT  "jobs".* FROM "jobs" WHERE "jobs"."permalink" = ? LIMIT 1  [["permalink", "excelwithcode-7d492bf330ab66b0eaa61ce2ce277e14"]]
  Payola::Coupon Load (1.0ms)  SELECT  "payola_coupons".* FROM "payola_coupons" WHERE (lower(code) = lower(NULL))  ORDER BY "payola_coupons"."id" ASC LIMIT 1
   (1.0ms)  begin transaction
  Payola::Sale Exists (0.0ms)  SELECT  1 AS one FROM "payola_sales" WHERE "payola_sales"."guid" IS NULL LIMIT 1
  CACHE (0.0ms)  SELECT  1 AS one FROM "payola_sales" WHERE "payola_sales"."guid" IS NULL LIMIT 1
  Payola::Sale Exists (1.0ms)  SELECT  1 AS one FROM "payola_sales" WHERE "payola_sales"."guid" = 'ook4dp' LIMIT 1
  SQL (1.0ms)  INSERT INTO "payola_sales" ("product_id", "product_type", "email", "stripe_token", "currency", "amount", "state", "guid", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)  [["product_id", 1], ["product_type", "Job"], ["email", "neededforpayments@mybusinesstest.com"], ["stripe_token", "tok_184FksCc1zXXaitaOrD5ELaH"], ["currency", "usd"], ["amount", 20000], ["state", "pending"], ["guid", "ook4dp"], ["created_at", "2016-04-25 19:50:26.639939"], ["updated_at", "2016-04-25 19:50:26.639939"]]
  SQL (0.0ms)  INSERT INTO "versions" ("event", "created_at", "item_id", "item_type") VALUES (?, ?, ?, ?)  [["event", "create"], ["created_at", "2016-04-25 19:50:26.639939"], ["item_id", 2], ["item_type", "Payola::Sale"]]
   (150.3ms)  commit transaction
[ActiveJob] Enqueued Payola::Worker::ActiveJob (Job ID: 72e9235d-e2f2-42d6-8ae4-0a74dd8bce5d) to DelayedJob(default) with arguments: "Payola::ProcessSale", "ook4dp"
[ActiveJob]    (0.0ms)  begin transaction
[ActiveJob]   SQL (1.0ms)  INSERT INTO "delayed_jobs" ("queue", "handler", "run_at", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["queue", "default"], ["handler", "--- !ruby/object:ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper\njob_data:\n  job_class: Payola::Worker::ActiveJob\n  job_id: 72e9235d-e2f2-42d6-8ae4-0a74dd8bce5d\n  queue_name: default\n  arguments:\n  - Payola::ProcessSale\n  - ook4dp\n"], ["run_at", "2016-04-25 19:50:26.812282"], ["created_at", "2016-04-25 19:50:26.812282"], ["updated_at", "2016-04-25 19:50:26.812282"]]
[ActiveJob]    (87.0ms)  commit transaction
Completed 200 OK in 284ms (Views: 1.0ms | ActiveRecord: 244.3ms)


Started GET "/payola/status/ook4dp" for 127.0.0.1 at 2016-04-25 20:50:26 +0100
Processing by Payola::TransactionsController#status as */*
  Parameters: {"guid"=>"ook4dp"}
  Payola::Affiliate Load (1.0ms)  SELECT  "payola_affiliates".* FROM "payola_affiliates" WHERE (lower(code) = lower(NULL))  ORDER BY "payola_affiliates"."id" ASC LIMIT 1
  Payola::Sale Load (1.0ms)  SELECT  "payola_sales".* FROM "payola_sales" WHERE "payola_sales"."guid" = ? LIMIT 1  [["guid", "ook4dp"]]
Completed 200 OK in 8ms (Views: 1.0ms | ActiveRecord: 2.0ms)


Started GET "/payola/status/ook4dp" for 127.0.0.1 at 2016-04-25 20:50:28 +0100
Processing by Payola::TransactionsController#status as */*
  Parameters: {"guid"=>"ook4dp"}
  Payola::Affiliate Load (1.0ms)  SELECT  "payola_affiliates".* FROM "payola_affiliates" WHERE (lower(code) = lower(NULL))  ORDER BY "payola_affiliates"."id" ASC LIMIT 1
  Payola::Sale Load (1.0ms)  SELECT  "payola_sales".* FROM "payola_sales" WHERE "payola_sales"."guid" = ? LIMIT 1  [["guid", "ook4dp"]]
Completed 200 OK in 8ms (Views: 0.0ms | ActiveRecord: 2.0ms)

Under Network Tab from my Browser I get the following

{guid: "ook4dp", status: "pending", error: null}
error: null
guid: "ook4dp"
status: "pending"

config/application.rb

require File.expand_path('../boot', __FILE__)

require 'rails/all'
require 'active_job'
require 'active_record'
require 'action_controller'
require 'action_view'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module App
  class Application < Rails::Application
    config.i18n.enforce_available_locales = true

    config.action_controller.action_on_unpermitted_parameters = :raise
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
    # config.time_zone = 'Central Time (US & Canada)'

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de

    config.active_record.raise_in_transactional_callbacks = true

    config.active_job.queue_adapter = :delayed_job

  end
end

model/job.rb

class Job < ActiveRecord::Base
  include Payola::Sellable

  validates :title,
            :category,
            :location,
            :description,
            :company_name,
            :website,
            :email,
            :to_apply,
            presence: true
  validates :title, length: { maximum: 75 }
  validates :description, length: { minimum: 300 }
  validates :to_apply, length: { maximum: 500 }

  validates_formatting_of :email, using: :email
  validates_formatting_of :website, using: :url

  before_validation :provide_name, :provide_permalink

  def self.paid_ad
    where.not('stripeEmail' => nil).where.not('payola_sale_guid' => nil).where('created_at > ?', 30.days.ago)
  end

  def paid?
    (!(self.stripeEmail == nil) && !(self.payola_sale_guid == nil))
  end

  def self.search(params)
    jobs = Job.where('name like ? or description like?', "%#{params[:search]}%', '%#{params[:search]}%" ) if params [:search]
    jobs
  end


  private

  def provide_name
    self.name = 'excelwithcode' if self.name == nil
  end

  def provide_permalink
    self.permalink = "#{ self.name } #{ SecureRandom.hex }".parameterize if self.permalink == nil
  end
end

Looking at my development log, I understand the transaction keeps repeating itself because of Background Worker using ActiveJob which I set, but the main problem is that the transaction never gets successful and my Error alert responds on my Stripe Custom Payment Form as described above. In other words, once you click PAY, it freezes.

I still don't know why this happened and I need your help. Thanks for helping in advance


回答1:


I fixed this problem.

The problem is from the Background Worker inside /config/application.rb

Comment Background Worker inside /config/application.rb and require other dependencies, such that it becomes this code below:

require File.expand_path('../boot', __FILE__)

require 'rails/all'
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module App
  class Application < Rails::Application
    config.i18n.enforce_available_locales = true

    config.action_controller.action_on_unpermitted_parameters = :raise
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
    # config.time_zone = 'Central Time (US & Canada)'

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de

    config.active_record.raise_in_transactional_callbacks = true

    #config.active_job.queue_adapter = :delayed_job

  end
end

That will fix it.



来源:https://stackoverflow.com/questions/36864733/i-get-a-pending-error-whenever-i-click-on-pay-using-payola-payment-gem-a-gem

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!