问题
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