尝试加载gem’设计时出错。 ActiveSupport:持续时间不能强制转换为Integer

我一直试图解决这个错误一段时间没有找到任何帮助,请帮助。

我正在尝试使用设计gem在我的ROR应用上运行迁移。 但我从ActiveSupport得到错误’持续时间无法强制转换为整数’。 发生这种情况然后我尝试运行:

rake db:migrate 

我不确定它是否与迁移代码有关,或者它是否与新的设计版本有关。 这是错误消息:

 /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/values/time_zone.rb:285: warning: circular argument reference - now /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thread_safe-0.3.5/lib/thread_safe/cache.rb:155: warning: constant ::Fixnum is deprecated rake aborted! Bundler::GemRequireError: There was an error while trying to load the gem 'devise'. Gem Load Error is: ActiveSupport::Duration can't be coerced into Integer Backtrace for gem load error is: /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/core_ext/numeric/time.rb:50:in `*' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/core_ext/numeric/time.rb:50:in `days' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/core_ext/numeric/time.rb:55:in `weeks' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/devise-4.2.0/lib/devise.rb:121:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/devise-4.2.0/lib/devise.rb:9:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `block (2 levels) in require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `each' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `block in require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `each' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler.rb:106:in `require' /home/sam/aplicaciones/pess/config/application.rb:7:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' /home/sam/aplicaciones/pess/Rakefile:4:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/rake_module.rb:28:in `load' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/rake_module.rb:28:in `load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:687:in `raw_load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:96:in `block in load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:95:in `load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:79:in `block in run' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:77:in `run' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/exe/rake:27:in `' /home/sam/.rbenv/versions/2.4.0/bin/rake:22:in `load' /home/sam/.rbenv/versions/2.4.0/bin/rake:22:in `' Bundler Error Backtrace: /home/sam/aplicaciones/pess/config/application.rb:7:in `' /home/sam/aplicaciones/pess/Rakefile:4:in `' TypeError: ActiveSupport::Duration can't be coerced into Integer /home/sam/aplicaciones/pess/config/application.rb:7:in `' /home/sam/aplicaciones/pess/Rakefile:4:in `' (See full trace by running task with --trace) 

我正在使用:

 ruby '2.4.0' gem 'rails', '4.1.1' gem 'devise', '~> 4.2.0' 

请让我知道如何才能让这个问题变得更好。 问候。

编辑:这是迁移文件之一:

 class DeviseCreateUsers < ActiveRecord::Migration def change create_table(:users) do |t| t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.string :reset_password_token t.datetime :reset_password_sent_at t.datetime :remember_created_at t.integer :sign_in_count, default: 0, null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip t.timestamps end end end 

此外,当尝试捆绑exec rake db:migrate时,我得到几乎相同:

 bundle exec rake db:migrate /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/values/time_zone.rb:285: warning: circular argument reference - now /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thread_safe-0.3.5/lib/thread_safe/cache.rb:155: warning: constant ::Fixnum is deprecated rake aborted! Bundler::GemRequireError: There was an error while trying to load the gem 'devise'. Gem Load Error is: ActiveSupport::Duration can't be coerced into Integer Backtrace for gem load error is: /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/core_ext/numeric/time.rb:50:in `*' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/core_ext/numeric/time.rb:50:in `days' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.1.1/lib/active_support/core_ext/numeric/time.rb:55:in `weeks' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/devise-4.2.0/lib/devise.rb:121:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/devise-4.2.0/lib/devise.rb:9:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `block (2 levels) in require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `each' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `block in require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `each' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `require' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler.rb:106:in `require' /home/sam/aplicaciones/pess/config/application.rb:7:in `' /home/sam/aplicaciones/pess/Rakefile:4:in `require' /home/sam/aplicaciones/pess/Rakefile:4:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/rake_module.rb:28:in `load' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/rake_module.rb:28:in `load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:687:in `raw_load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:96:in `block in load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:95:in `load_rakefile' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:79:in `block in run' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/lib/rake/application.rb:77:in `run' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rake-12.0.0/exe/rake:27:in `' /home/sam/.rbenv/versions/2.4.0/bin/rake:22:in `load' /home/sam/.rbenv/versions/2.4.0/bin/rake:22:in `' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/cli/exec.rb:74:in `load' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/cli/exec.rb:74:in `kernel_load' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/cli/exec.rb:27:in `run' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/cli.rb:332:in `exec' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/cli.rb:20:in `dispatch' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/cli.rb:11:in `start' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/exe/bundle:34:in `block in ' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/friendly_errors.rb:100:in `with_friendly_errors' /home/sam/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/exe/bundle:26:in `' /home/sam/.rbenv/versions/2.4.0/bin/bundle:22:in `load' /home/sam/.rbenv/versions/2.4.0/bin/bundle:22:in `' Bundler Error Backtrace: /home/sam/aplicaciones/pess/config/application.rb:7:in `' /home/sam/aplicaciones/pess/Rakefile:4:in `require' /home/sam/aplicaciones/pess/Rakefile:4:in `' /home/sam/.rbenv/versions/2.4.0/bin/bundle:22:in `load' /home/sam/.rbenv/versions/2.4.0/bin/bundle:22:in `' TypeError: ActiveSupport::Duration can't be coerced into Integer /home/sam/aplicaciones/pess/config/application.rb:7:in `' /home/sam/aplicaciones/pess/Rakefile:4:in `require' /home/sam/aplicaciones/pess/Rakefile:4:in `' /home/sam/.rbenv/versions/2.4.0/bin/bundle:22:in `load' /home/sam/.rbenv/versions/2.4.0/bin/bundle:22:in `' (See full trace by running task with --trace) 

我昨天遇到了这个问题,同时让rails 3.2和ruby 2.4一起工作。 我通过猴子修补activesupport库来修复它,这是问题所在。

解决方案:切换乘法的顺序,先放入持续时间

在rails初始值设定项中包含以下代码:

 # pulled from https://github.com/rails/rails/blob/v3.2.22.5/activesupport/lib/active_support/core_ext/numeric/time.rb class Numeric def days ActiveSupport::Duration.new(24.hours * self, [[:days, self]]) end alias :day :days def weeks ActiveSupport::Duration.new(7.days * self, [[:days, self * 7]]) end alias :week :weeks def fortnights ActiveSupport::Duration.new(2.weeks * self, [[:days, self * 14]]) end alias :fortnight :fortnights end # pulled from https://github.com/rails/rails/blob/v3.2.22.5/activesupport/lib/active_support/core_ext/integer/time.rb class Integer def months ActiveSupport::Duration.new(30.days * self, [[:months, self]]) end alias :month :months def years ActiveSupport::Duration.new(365.25.days * self, [[:years, self]]) end alias :year :years end 

在尝试将旧应用程序升级到rails 4时,今天面临的问题。

问题是ruby版本(2.4.0)并没有自己设计。 考虑使用ruby-2.3.3或更低版本,它将像魅力一样工作!

尝试运行bundle exec rake db:migrate并让我知道输出。 如果没有前面的bundle exec ,它将无法知道使用哪些gem并将使用原生(系统)gem。

还尝试运行bundle update ,然后重新运行迁移。

切换到rails版本至少5.0.2,删除您的Gemfile.lock并运行bundle update

5.2.0是最新的,这是在18年4月9日发布的。

今天,我面临同样的问题,但不同版本,我的ruby版本2.4.2和rails版本4.0.13。

我得到了同样的错误,现在就修好了。 感谢@ thomas-dziedzic。

解决方案是:

  1. 我从https://github.com/rails/rails/commit/32f215c3014e580e512db5e8772d0deadf3d6497中提取
  2. 我根据此链接编辑然后编辑https://github.com/rails/rails/blob/32f215c3014e580e512db5e8772d0deadf3d6497/activesupport/lib/active_support/core_ext/numeric/conversions.rb

当我编辑active_support时,问题就解决了。

Interesting Posts