我正在尝试使用bamboo-mri-1.9.2
堆栈运行我的Heroku应用程序。当然它在Ruby 1.9.2上运行良好。但是在生产时它会在启动时崩溃,执行config.ru
,如下所示:
require 'sinatratestapp'
run Sinatra::Application
我的.gems
文件:
sinatra --version '>= 1.0'
应用程序本身为sinatratestapp.rb
:
require 'rubygems'
require 'sinatra'
get '/' do
"Hello from Sinatra on Heroku!"
end
这就是我在项目中的所有内容,并尝试在Heroku上运行该结果:
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- sinatratestapp (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from config.ru:1:in `block (3 levels) in <main>'
...
-----> Your application is requiring a file that it can't find.
Most often this is due to missing gems, or it could be that you failed
to commit the file to your repo. See http://docs.heroku.com/gems for
more information on managing gems.
Examine the backtrace above this message to debug.
我试图按照它的指导去做,但作为一个Ruby noob,我的考试没有任何结果。
答案 0 :(得分:38)
在Heroku支持请求和this question的帮助下,我找到了解决方案。
Ruby 1.9.2不会自动包含“。”在$ LOAD_PATH中。要解决此问题,请通过声明config.ru
而不是require './sinatratestapp'
来修改require 'sinatratestapp'
。
答案 1 :(得分:3)
您可以在config.ru文件中添加以下行,它也可以解决问题。这也将适用于应用范围,因此它将带回1.9.2之前的行为感觉:
$ LOAD_PATH.unshift(Dir.getwd)
注意:我无法在Heroku上进行测试
我的问题:使用没有Gemfile,config.ru或config / unicorn.rb的(ruby&lt; 1.9.2)sinatra应用程序让独角兽行为正常。
答案 2 :(得分:1)
我相信在尝试使用Sinatra时遇到了这个问题。默认情况下,Ruby 1.9不包含路径中的当前目录,因此您必须在require 'sinatratestapp'
文件中隐式声明config.ru
。
答案 3 :(得分:0)
感谢您的提示。 Heroku帖子http://blog.heroku.com/archives/2009/3/5/32_deploy_merb_sinatra_or_any_rack_app_to_heroku/
中没有提及.gems文件答案 4 :(得分:-1)
我的Sinatra项目具有相同的布局并且看起来大致相同,唯一的区别是在我的.gems文件中我没有指定版本。
我的.gems看起来像这样:
sinatra
hpricot