启动应用程序时,heroku出错`require':无法加载此类文件 - active_model(LoadError)

时间:2014-06-15 14:50:07

标签: ruby heroku sinatra sequel

我是使用heroku和ruby的新手(这肯定解释了为什么我错过了这一点),这就是我的问题:

我之前已经在heroku上部署了一个基本的sinatra应用程序而没有任何问题,但我最近使用Sequel ORM的数据库支持更新了它。虽然我的vagrant vhost上的一切运行正常,但在heroku上部署之后,服务器崩溃并出现了一个loaderror异常:

Jun 15 07:49:50 test-app heroku/web.1:  State changed from crashed to starting
Jun 15 07:50:01 test-app heroku/web.1:  Starting process with command `bundle exec thin start -p 23255`
Jun 15 07:50:09 test-app app/web.1:  /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler/runtime.rb:76:in `require': cannot load such file -- activemodel            (LoadError)
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler/runtime.rb:72:in `each'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler/runtime.rb:72:in `block in require'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler/runtime.rb:61:in `each'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler/runtime.rb:61:in `require'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.5.2/lib/bundler.rb:131:in `require'
Jun 15 07:50:09 test-app app/web.1:   from config.ru:7:in `block in <main>'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
Jun 15 07:50:09 test-app app/web.1:   from config.ru:1:in `new'
Jun 15 07:50:09 test-app app/web.1:   from config.ru:1:in `<main>'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/lib/rack/adapter/loader.rb:33:in `eval'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/lib/rack/adapter/loader.rb:33:in `load'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/lib/thin/controllers/controller.rb:182:in `load_rackup_config'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/lib/thin/controllers/controller.rb:72:in `start'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/lib/thin/runner.rb:199:in `run_command'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/lib/thin/runner.rb:155:in `run!'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/gems/thin-1.6.2/bin/thin:6:in `<top (required)>'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/bin/thin:23:in `load'
Jun 15 07:50:09 test-app app/web.1:   from /app/vendor/bundle/ruby/1.9.1/bin/thin:23:in `<main>'
Jun 15 07:50:10 test-app heroku/web.1:  Process exited with status 1
Jun 15 07:50:10 test-app heroku/web.1:  State changed from starting to crashed

我非常确定在heroku环境中有与$ LOAD_PATH相关的内容,但我无法找到问题所在,因为我无法在我自己的环境(即使在生产模式下,从全新安装,使用相同的命令启动服务器)。

我为这里发现的类似问题尝试了几个命题,比如以不同的方式修改Procfile或config.ru,或者在Gemfile中明确地添加activemodel Gem,但到目前为止没有任何帮助。

非常感谢任何帮助!

修改

好的,按照您的建议,我添加gem 'activerecord',而不是&#39; active_record&#39;因为Could not find gem 'active_record (>= 0) ruby' in the gems available on this machine. 并且没有更多来自heroku的抱怨,该应用程序开始...

但我需要明白:

  • 为什么需要一个我不需要也不需要的宝石(我使用续集,据我所知,它根本不使用活动记录)
  • 为什么除了heroku之外我没有其他任何问题?

由于

2 个答案:

答案 0 :(得分:2)

事实证明,heroku支持能够向我解释这个问题:

我正在使用通配符目录路径加载我的所有模型

Dir['./**/*_model.rb'].each { |m| require m }

然而,在heroku上,宝石被捆绑在应用程序的路径中,这意味着以下路径符合我的要求:

from /app/vendor/bundle/ruby/1.9.1/gems/sequel-4.11.0/lib/sequel/plugins/active_model.rb:1:in&#39;`

在我的应用程序中包含此文件包括Sequel的ActiveModel插件,它需要active_model gem。

更改模型的需求路径以仅包含来自我的应用程序的文件,这样可以解决依赖性问题。

这是一个与错误的需求设计相关的非常具体的案例,我只能责怪自己,但无论如何,如果有人在某天遇到同样的问题,我会发布解决方案。

答案 1 :(得分:0)

您是否在Gemfile中添加了active_record gem?

gem 'active_record'

ActiveModel是ActiveRecord gem下的众多项目之一。

Related question