每当我在我的Rails 4.2.1应用程序中单击使用Payola-Payment Gem(为Stripe制作的gem)付款时,我都会收到“待定错误”

使用Payola-Payments Gem处理Stripe Payments,有必要为您的交易设置后台工作程序。 使用ActiveJob设置后台工作程序后,单击付款时会出现错误。

这是它

注意:我使用的是Windows环境(Windows 8),我相信这里有些问题。 我的视图上的错误警报渲染:

这似乎花了太长时间。 请联系支持并给他们交易ID:ook4dp

以下是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) 

在我的浏览器的网络选项卡下,我得到以下内容

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

配置/ 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 

模型/ job.rb

 class Job  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 

查看我的开发日志,我理解事务不断重复,因为后台工作者使用我设置的ActiveJob, 但主要问题是事务永远不会成功 ,我的错误警报响应我的条带自定义付款表单,如上所述。 换句话说,一旦你点击PAY,它就会冻结。

我仍然不知道为什么会这样,我需要你的帮助。 感谢您提前帮助

我解决了这个问题。

问题来自/config/application.rb中的Background Worker

/config/application.rb中注释后台工作者并需要其他依赖项,以便它成为以下代码:

 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 

这将解决它。