【问题标题】:Errno::ENOENT at / no such file or directoryErrno::ENOENT 在/没有这样的文件或目录
【发布时间】:2017-08-08 09:34:37
【问题描述】:

我目前正在开发一个 sinatra 应用程序,但遇到了一个小问题。

我正在尝试加载我的 index.erb,但 sinatra 找不到 index.erb。

这是我的 app.rb

require 'rubygems'
require 'sinatra'

module Registration
  class HelloWorldApp < Sinatra::Base
    get '/' do
      erb :index
    end
  end
end

这是我的代码层次结构。

它一直在寻找目录:Sinatra-Intro/app/views/index.erb 但我的观点在:Sinatra-Intro/views/index.erb

【问题讨论】:

  • 您是从根目录运行应用程序还是从应用程序文件夹运行应用程序?

标签: ruby sinatra


【解决方案1】:

您需要配置您的应用程序实例,这样应该可以工作:

require 'rubygems'
require 'sinatra'

module Registration
  class HelloWorldApp < Sinatra::Base
    configure do
      set :public_folder  , File.expand_path('../public', __FILE__)
      set :views          , File.expand_path('../views', __FILE__)
      set :root           , File.dirname(__FILE__)
      set :show_exceptions, development?

      # Optional: Load from external file
      #YAML.load_file('path/to/config.yml').each do |k, v|
      #  set(k.to_sym, v)
      #end
    end

    get '/' do
      erb :index
    end
  end
end

然后:

bundle exec rackup

【讨论】:

  • 有没有我可以在一个文件中分离这个配置?
  • @JohnGeliberte 是的,你可以。我已经用一个简单的示例更新了答案,尽管您可能不应该从外部源设置其中一些配置值(公共文件夹、视图、根等)。
【解决方案2】:

您可以使用视图设置更改默认位置。像这样:

set :views, Proc.new { File.join(root, "views") }

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2015-06-12
    • 1970-01-01
    • 2014-07-09
    • 2013-02-01
    • 2018-05-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多