我正在使用rails 2.3.4和ruby 1.8.7。 在我的应用程序中,当我尝试通过移动Api购买商品(这是金属请求)时,购买成功,现在当我转到网络界面并对商品进行任何更改,如购买限制或商品的价格,然后尝试通过移动api再次购买,它会抛出错误
A copy of ApplicationHelper has been removed from the module tree but is still active!
[RAILS_ROOT]/vendor/rails/activesupport/lib/active_support/dependencies.rb:414:in `load_missing_constant'
[RAILS_ROOT]/vendor/rails/activesupport/lib/active_support/dependencies.rb:80:in `const_missing_not_from_s3_library'
/home/user/.rvm/gems/ruby-1.8.7-p334/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing'
[RAILS_ROOT]/app/helpers/web_application_helper.rb:414:in `purchases_left'
[RAILS_ROOT]/app/helpers/web_application_helper.rb:83:in `accept_purchase_direct'
[RAILS_ROOT]/lib/api/publisher/v1_purchases_helper.rb:49:in `purchases_handler'
[RAILS_ROOT]/app/metal/v1_purchases_controller.rb:54:in `call'
[RAILS_ROOT]/vendor/rails/railties/lib/rails/rack/metal.rb:44:in `call'
[RAILS_ROOT]/vendor/rails/railties/lib/rails/rack/metal.rb:43:in `each'
[RAILS_ROOT]/vendor/rails/railties/lib/rails/rack/metal.rb:43:in `call'
[RAILS_ROOT]/vendor/rails/actionpack/lib/action_controller/session/abstract_store.rb:122:in `call'.
我在网上环顾四周,因为没有人遇到同样的问题,但无法找到相同的修复程序。现在当服务器重新启动并且我试图购买时,它是成功的。我无法弄清楚原因,但仍然想提出我的想法,如果在我们连接到数据库的每个操作后,由于从数据库查询的行引发错误,它是否可以修复:
def purchases_left
accepted = AcceptedOffer.find_all_by_offer_id_and_user_id(offer.id, current_user.id)
end
我已经打印了商品的价值并且正确无误。我想不出要提供更多的代码。欢迎任何疑问。
答案 0 :(得分:1)
在开发模式下出现错误,因为缓存设置为false,因此在开发模式下将缓存设置为true之后,将不会发生错误,但会发生查询缓存,因此您需要对其进行操作。此外,我在调用下一个操作后未加载类的金属请求。 在生产的情况下,发生查询缓存,而在此模式下不出现错误,但结果不如预期,因为未反映数据库中的更改。 所以在这两种情况下,有效的解决方案都是绕过查询缓存。