1

Mit Payola-Payments Gem, um Stripe Payments zu bearbeiten, muss Background Worker eingestellt werden für Ihre Transaktion. Nachdem ich Background Worker mit ActiveJob eingerichtet habe, erhalte ich einen Fehler, wenn ich auf "Pay" klicke.Ich erhalte einen "Pending Error", wenn ich in Payload mit Payola-Payment Gem (Ein gem für Stripe gemachtes Juwel) in meiner Rails 4.2.1 Anwendung klicke

Hier ist es:

Hinweis: Bin mit dem Windows-Umgebung (Windows 8) und ich glaube, dass es etwas falsch hier tue. Fehleralarm Renders auf meiner Ansicht:

Das zu lange zu sein scheint nehmen. Bitte kontaktieren Sie den Support und gibt ihnen Transaktions-ID: ook4dp

Hier ist der generierte Code aus 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"=>"[email protected]", "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", "[email protected]"], ["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) 

unter Netzwerk Tab von meinem Browser mir folgenden

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

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 

Modell/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 

Ein Blick auf meine Entwicklung log, ich verstehe die Transaktion wegen Hintergrund Worker wiederholt sich ActiveJob verwendet hält, die ich gesetzt, aber das Hauptproblem ist, dass die Transaktion nie erfolgreich wird und meine Fehlerwarnung auf meinem Stripe Custom Payment Form wie oben beschrieben reagiert. Mit anderen Worten: Sobald Sie auf PAY klicken, bleibt es stehen.

Ich weiß immer noch nicht, warum das passiert ist und ich brauche deine Hilfe. Vielen Dank für Ihre Hilfe

Antwort

0

Ich habe dieses Problem behoben.

Das Problem ist, aus dem Hintergrund Arbeiter innerhalb /config/application.rb

Kommentars Hintergrund Arbeiter innerhalb /config/application.rb und erfordern andere Abhängigkeiten, so dass es diesen Code unten wird:

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 

Das wird es beheben.

+0

Eh? Die Lösung, die Sie gepostet haben, sieht fast genauso aus wie die Frage. Ich habe "config.active_job.queue_adapter =: delayed_job" gesetzt, bekomme aber immer noch diesen Fehler. –

+0

@PrestonLee Welche Version von Rails und Ruby verwenden Sie? –

+0

Wenn Sie alte Versionen von Rails niedriger als 4.2 sowie Ruby verwenden, aktualisieren Sie sie. Dann kommentieren Sie 'config.active_job.queue_adapter =: delayed_job' aus dem Weg und führen Sie Ihren Prozess erneut aus. Trotzdem könnten Sie wollen verwenden anderen Hintergrund Arbeiter wie: 'Sidekiq (: sidekiq)' und 'Suckerpunch (: sucker_punch)' –