【发布时间】:2016-12-04 12:30:53
【问题描述】:
我正在尝试向 Google 添加 oauth2,关注 these instructions。
我在启动服务器时收到以下错误消息:
Exiting
You've tried to invoke Spring when it's already loaded (i.e. the Spring constant is defined).
This is probably because you generated binstubs with Spring 1.0, and you now have a Spring version > 1.0 on your system. To solve this, upgrade your bundle to the latest Spring version and then run `bundle exec spring binstub --all` to regenerate your binstubs. This is a one-time step necessary to upgrade from 1.0 to 1.1.
Here's the backtrace:
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `block in load'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:259:in `load_dependency'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `<top (required)>'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `require'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
/Users/omonia/.rbenv/versions/2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
/Users/omonia/Dropbox/MyApp/bin/spring:13:in `<top (required)>'
安装的相关gem:
gem 'google-api-client', '0.9'
gem 'omniauth'
gem 'omniauth-google_oauth2'
以下代码添加到config/initializers/omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, 'my Google client id', 'my Google client secret', {client_options: {ssl: {ca_file: Rails.root.join("cacert.pem").to_s}}}
end
这里发生了什么?遵循错误说明不会改变任何东西(Spring 是最新版本 1.7.2 并且运行 bundle exec spring binstub --all 只会返回“spring 已经存在”)。
【问题讨论】:
-
你升级了
Spring吗? -
你能先运行
bin/spring binstub --remove --all,然后运行bundle exec spring binstub --all吗?确保在所有这些命令之前升级 spring -
我现在按照您的步骤操作,但仍然出现相同的错误消息。我应该补充一点,这是一个新应用程序,所以几乎没有其他令人不安的代码。要添加的第二件事:如果我删除了omniauth-initializer 中的代码 - 我不会再收到任何错误。
-
如果你去掉整个弹簧呢?我认为这应该有效。只需执行
bin/spring binstub --remove --all并从Gemfile中删除gem 并再次运行bundle install。当然然后重启服务器。 -
我照你说的做了。错误消失了,但出现了另一个关于 oauth 的错误。在搜索该错误I learned 之后,
omniauth-google-oauth2gem 拼写错误(用连字符代替下划线)。修复第二个错误后,我尝试重新添加 Spring,现在原始错误也消失了。一千次感谢@ArupRakshit 为我指明了正确的方向!
标签: ruby-on-rails oauth-2.0 ruby-on-rails-5 google-oauth rails-spring