我是使用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的抱怨,该应用程序开始...
但我需要明白:
由于
答案 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下的众多项目之一。