1

С помощью Payome-Payments Gem для обработки платных платежей необходимо установить фоновый рабочий стол для вашей транзакции. После настройки фонового рабочего с помощью ActiveJob, я получу ошибку, когда я нажму платить.Я получаю сообщение «Ожидающая ошибка» всякий раз, когда я нажимаю «Оплатить» с помощью Payola-Payment Gem (драгоценный камень, сделанный для Stripe) в приложении Rails 4.2.1.

Вот это:

Примечание: Я использую среды Windows (Windows 8), и я полагаю, что есть что-то делаю неправильно здесь. Ошибка оповещения Оказывает на мой взгляд:

Это, кажется, слишком долго. Пожалуйста, обратитесь в службу поддержки и дать им идентификатор транзакции: ook4dp

Вот сгенерированный код из консоли

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) 

вкладке Сеть из моего браузера я получаю следующее

{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 

модель/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 

Глядя на мой журнал разработки, я понимаю, сделка не устает повторять себя из фона работника с использованием ActiveJob, который я поставил, , но основная проблема заключается в что транзакция никогда не будет успешной, и мое оповещение об ошибке ответит на мою пользовательскую форму оплаты Stripe, как описано выше. Другими словами, как только вы нажмете «ПЛАТИТЬ», он замерзает.

Я до сих пор не знаю, почему это произошло, и мне нужна ваша помощь. Спасибо за помощь заранее

ответ

0

Я исправил эту проблему.

Проблема заключается в том от фона Работник внутри /config/application.rb

комментарий фона работника внутри /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 

Это исправит.

+0

Eh? Решение, которое вы разместили, выглядит почти так же, как вопрос. У меня есть «config.active_job.queue_adapter =: delayed_job», но я все равно получаю эту ошибку. –

+0

@PrestonLee Какую версию Rails и Ruby вы используете? –

+0

Если вы используете старые версии Rails ниже 4.2, а также Ruby, обновите их. Затем прокомментируйте 'config.active_job.queue_adapter =: delayed_job' и запустите свой процесс еще раз. Тем не менее, вы можете хотите использовать другие Фоновые Рабочие, такие как: 'Sidekiq (: sidekiq)' и 'Запрещённый приём (: sucker_punch)' –