代码之家  ›  专栏  ›  技术社区  ›  Jack

Sinatra在Ruby 1.9.2-p0上找不到视图

  •  5
  • Jack  · 技术社区  · 14 年前

    我有一个琐碎的网站,包含在 /mywebpage

    # blog.rb
    get '/' do
      'Hello World!'
    end
    
    get '/impossible' do
      haml :index
    end
    

    #config.ru
    path = File.expand_path "../", __FILE__
    
    $LOAD_PATH << (File.expand_path ".") + "/views"
    
    require 'haml'
    require 'sinatra'
    require "#{path}/blog"
    
    run Sinatra::Application
    

    在同一个文件夹里我有一个 /views/ 包含的文件夹 index.haml .

    我试着用 rackup -p8080 /impossible 我收到以下错误:

    Errno::ENOENT at /impossible
    No such file or directory - /home/jack/mywebpage/<internal:lib/rubygems/views/index.haml
    

    通过互联网搜索,似乎这可能是由于“.”没有被纳入 $LOAD_PATH 所以我尝试添加它或者直接添加视图 ./views 所以实际上 $LOAD_PATH.inspect 给了我正确的路径: ..., "/home/jack/mywebpage/views"]

    5 回复  |  直到 8 年前
        1
  •  12
  •   Nakilon earlonrails    8 年前

    使用Ruby1.9.2运行Sinatra时,模板目录不再是隐式的“视图”,您需要自己设置它。

    set :views, File.dirname(__FILE__) + "/views"
    

    Kernel#__dir__() 等效于 File.dirname(__FILE__) .

        2
  •  3
  •   Phrogz    14 年前

    以及1.9的其他问题, 已经 你可以用这个叉子: http://github.com/rkh/sinatra/tree/1.1

        3
  •  1
  •   AboutRuby    14 年前

    我遇到了一个类似的问题,并且很快就解决了 this . 我没有深入研究这个问题,但这是我发现的,它是有效的。它应该会在下一个版本的Sinatra中修复(他们真的应该离开这个版本,只是为了修复这几个1.9.2 bug)。

    #!/usr/bin/env ruby
    require 'rubygems'
    require 'sinatra'
    
    enable :run
    
    get '/' do
      "Hello, world!"
    end
    

    编辑:似乎1.9.2版的Sinatra有多个bug。这一个将修复Sinatra应用程序不启动1.9.2。我不使用视图目录(我喜欢将我的应用程序保存为单个文件),因此我没有遇到您的特定问题。这个补丁很可能根本帮不了你。我可能应该更仔细地看你的问题。。

        4
  •  1
  •   Konstantin Haase    14 年前
    gem install sinatra --pre
    
        5
  •  0
  •   the Tin Man    14 年前

    哦,既然你是Ruby的新手,你可能不知道rvm,所以下面是真相。RVM仅适用于Mac,强烈建议用于管理Ruby版本和gems。它使得拥有多个Ruby版本和备用gem组来进行开发和测试变得很简单。所有内容都存储在~/.rvm目录中,因此如果需要,可以轻松地将其全部清除。

    http://rvm.beginrescueend.com/

    http://github.com/sinatra/sinatra/issues/#issue/50

    我有点反对按照第50期的建议编辑Sinatra的源代码,但这并不难。我希望看到他们发布一个更新,以便我们有一个正式的修复,但我还没有看到任何东西:

    gem env 会告诉你“宝石之路”。西纳特拉的宝石将在其中之一。第50期中提到的一行基本.rb. 在我的机器上 ...gems/ruby-1.9.2-p0/gems/sinatra-1.0/lib/sinatra/base.rb

    插入:

        /<internal:/, # ruby 1.9.2-p0 hacks
    

    保存文件,你就可以走了。