我有一个奇怪的bug,这取决于我如何在Gemfile中指定gem。
如果我使用标准宝石作为
gem 'activemerchant'或者从路径加载它,如
gem 'activemerchant', path: '/home/alexd/src/active_merchant'但是,如果我从git加载它,如
gem 'activemerchant', git: 'https://github.com/Shopify/active_merchant'然后,下面的代码会导致运行rspec时崩溃。
config/initializers/active_merchant.rb
ActionView::Base.send(:include, ActiveMerchant::Billing::Integrations::ActionViewHelper)堆栈跟踪
/home/alexd/.rvm/gems/ruby-1.9.3-p545@app/bundler/gems/active_merchant-09ec2cbcfe96/lib/active_merchant/billing/integrations/action_view_helper.rb:8:in `<module:Integrations>': can't convert Pathname into String (TypeError)
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/bundler/gems/active_merchant-09ec2cbcfe96/lib/active_merchant/billing/integrations/action_view_helper.rb:5:in `<module:Billing>'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/bundler/gems/active_merchant-09ec2cbcfe96/lib/active_merchant/billing/integrations/action_view_helper.rb:4:in `<module:ActiveMerchant>'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/bundler/gems/active_merchant-09ec2cbcfe96/lib/active_merchant/billing/integrations/action_view_helper.rb:3:in `<top (required)>'
from /home/alexd/app/app/config/initializers/active_merchant.rb:5:in `<top (required)>'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:245:in `load'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:245:in `block in load'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:236:in `load_dependency'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:245:in `load'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/engine.rb:593:in `block (2 levels) in <class:Engine>'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/engine.rb:592:in `each'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/engine.rb:592:in `block in <class:Engine>'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/initializable.rb:30:in `instance_exec'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/initializable.rb:30:in `run'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/initializable.rb:55:in `block in run_initializers'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/initializable.rb:54:in `each'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/initializable.rb:54:in `run_initializers'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/application.rb:136:in `initialize!'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/railties-3.2.17/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /home/alexd/app/app/config/environment.rb:7:in `<top (required)>'
from /home/alexd/app/app/spec/spec_helper.rb:9:in `require'
from /home/alexd/app/app/spec/spec_helper.rb:9:in `<top (required)>'
from /home/alexd/app/app/spec/controllers/abuse_report_controller_spec.rb:2:in `require'
from /home/alexd/app/app/spec/controllers/abuse_report_controller_spec.rb:2:in `<top (required)>'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `load'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `block in load_spec_files'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `each'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/configuration.rb:896:in `load_spec_files'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/command_line.rb:22:in `run'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/runner.rb:80:in `run'
from /home/alexd/.rvm/gems/ruby-1.9.3-p545@app/gems/rspec-core-2.14.7/lib/rspec/core/runner.rb:17:in `block in autorun'更新
在config/initializers/active_merchant.rb中,甚至可以通过简单的要求触发崩溃。
require 'active_merchant/billing/integrations/action_view_helper.rb'看起来是由路径长度引起的。如果我需要具有较短路径名的模块,它可以工作:
require 'active_merchant/billing/integrations/moneybookers.rb'崩溃也是由路径跟踪时间较长的任何模块崩溃造成的。
require 'active_merchant/billing/integrations/paypal_payments_advanced.rb发布于 2014-04-27 05:53:42
我认为创业板的网址必须是git://github.com/username/repo_name .git格式
因此,对于你的例子:
gem 'activemerchant', :git => 'git://github.com/Shopify/active_merchant.git'来自http://bundler.io/v1.3/man/gemfile.5.html
如果有必要,可以指定gem位于特定的GIT存储库中。存储库可以是公共存储库(http://github.com/rails/rails.git),也可以是私有存储库(git@github.com:rails/rails.git)。如果存储库是私有的,用于运行bundle安装的用户必须在其$HOME/..ssh中拥有可用的相应密钥。 Git存储库使用:git参数指定。组、平台和require选项是可用的,它们的行为与正常的gem完全相同。 gem "rails",:git => "git://github.com/rails/rails.git“
这在我的Rails 3.2.16应用程序中适用于我。
或者,您可以使用:github的缩写来表示公共回购:
GITHUB ( :github )如果您想要使用的git存储库是托管在GitHub上并且是公共的,您可以使用: github简写来指定github用户名和存储库名(没有尾随的".git"),用斜杠分隔。如果用户名和存储库名称都是相同的,则可以省略一个。 gem "rails",:github => "rails/rails“ gem "rails",:github => "rails“ 两者都相当于 gem "rails",:git => "git://github.com/rails/rails.git“
发布于 2014-05-17 17:49:09
升级到ruby2.x解决了这个问题,但我仍然在寻找适用于1.9.3的解决方案,因为我还没有准备好将整个应用程序迁移到ruby2.x。
https://stackoverflow.com/questions/23108075
复制相似问题