我正在使用Ruby on Rails v4.0.3(Ruby 2.1.0p0),今天下午我的项目完全正常工作,直到我决定清理我的控制器及其路由(自定义控制器和管理员和用户页面的路由)。
现在,这一切在我的开发版本中运行良好,但我无法在我的网络服务器上启动应用程序(使用Apache en Passenger)。启动应用程序时,它给出了以下错误:
uninitialized constant PayPal::SDK::REST::API::V1 (NameError)
/Volumes/Projects/iosfy/website/app/controllers/api/v1/query_controller.rb:1:in `<top (required)>'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/engine.rb:465:in `block (2 levels) in eager_load!'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/engine.rb:464:in `each'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/engine.rb:464:in `block in eager_load!'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/engine.rb:462:in `each'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/engine.rb:462:in `eager_load!'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/engine.rb:347:in `eager_load!'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/application/finisher.rb:56:in `each'
/Users/depl0y/.rvm/gems/ruby-2.1.0/gems/railties-4.0.0/lib/rails/application/finisher.rb:56:in `block in <module:Finisher>'
...
more stack trace ending in my environment.rb (Application.initialize!)
有趣的是,我的query_controller中没有对PayPal SDK的引用。
在我的配置文件中关闭eager_load后,网站就会运行(包括错误中提到的API)。
我怀疑我的路线是导致此错误的原因:
constraints :subdomain => /^api.*/ do
namespace :api, path: nil, defaults: {format: "json"} do
namespace :v1 do
match '/settings', to: 'query#settings', via: 'get'
...more routes
end
end
end
因为API :: V1不是PayPal SDK的一部分。
有人可以给我任何关于在哪里寻找的指示吗?我环顾了两个小时,但我似乎无法找到原因。
修改 好的,经过一些实验,似乎我的query_controller确实有问题。
我给了我的query_controller API :: V1 ::前缀(因为路由?)并删除它使我的应用程序重新启动。因此,应用程序再次启动,但调用API现在是一个问题。
我打电话给它,它仍然给我以下错误:
uninitialized constant PayPal::SDK::REST::API::V1
编辑2: 好吧,似乎我的命名空间API与PayPal使用(API)的命名空间冲突,因此崩溃和烧伤。
将我的API命名空间重命名为“服务”神奇地使它工作。我真的很想看到这个问题的解决方案。
如何正确地将我的命名空间“API :: V1”与PayPal :: SDK :: REST :: API命名空间分开?