Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Sinatra找不到视图目录_Ruby_Gem_Sinatra_Runtime Error - Fatal编程技术网

Ruby Sinatra找不到视图目录

Ruby Sinatra找不到视图目录,ruby,gem,sinatra,runtime-error,Ruby,Gem,Sinatra,Runtime Error,我正试图以一种更类似于普通Ruby Gem结构的方式构造我的Sinatra应用程序。我有以下文件树: . ├── app.rb ├── config.ru ├── Gemfile ├── Gemfile.lock ├── helpers │   ├── dbconfig.rb │   ├── functions.rb │   └── init.rb ├── hidden │   └── Rakefile ├── lib │   ├── admin.rb │   ├── api.rb │   ├─

我正试图以一种更类似于普通Ruby Gem结构的方式构造我的Sinatra应用程序。我有以下文件树:

.
├── app.rb
├── config.ru
├── Gemfile
├── Gemfile.lock
├── helpers
│   ├── dbconfig.rb
│   ├── functions.rb
│   └── init.rb
├── hidden
│   └── Rakefile
├── lib
│   ├── admin.rb
│   ├── api.rb
│   ├── indexer.rb
│   ├── init.rb
│   └── magnet.rb
├── models
│   ├── init.rb
│   ├── invite.rb
│   ├── tag.rb
│   ├── torrent.rb
│   └── user.rb
├── public
│   ├── css
│   │   ├── reset.css
│   │   └── style.css
│   ├── i
│   ├── img
│   │   ├── bg.jpg
│   │   ├── dl-icon.png
│   │   ├── logo.png
│   │   ├── logo-public.png
│   │   ├── magnet-icon.png
│   │   ├── text-logo.png
│   │   ├── text-logo-public.png
│   │   └── upload-icon.png
│   └── js
│       ├── main.js
│       └── torrents.js
├── README.md
├── SPEC.md
├── tmp
│   └── restart.txt
├── TODO.md
└── views
    ├── error.erb
    ├── footer.erb
    ├── header.erb
    ├── index.erb
    ├── list.erb
    ├── nav.erb
    ├── text.erb
    └── upload.erb
我有一些应用程序文件试图在
lib/
中呈现内容,但在(重新)启动乘客服务器时,我得到:
Errno::enoint-没有这样的文件或目录-/home/dev/indexer/lib/views/index.erb

令人不快的几行是:

get '/' do
  erb :index
end

如何修复此问题?

在配置块中指定视图目录的路径:

set :views, "#{settings.root}/../views"

查看如果不查看
rb
文件的内容,就很难猜出错误。如果在应用程序根目录下的子文件夹中的
rb
文件中定义了路由,则必须显式设置
views
文件夹

在您的情况下,假设
/app.rb
是设置基本配置的文件,则必须在其中设置
视图(或其他类似公用文件夹的内容)

class MyApp < Sinatra::Base
  set :views, File.dirname(__FILE__) + '/views'
  set :public_folder, File.dirname(__FILE__) + '/public'
end

好吧,我发现了问题所在!我所需要做的就是让
lib/
文件夹中的类继承自主
Brightswipe
类,该类继承自
Sinatra::Base
,我在
app.rb
(并非唯一)中的
Brightswipe
类,以及
models
文件夹中的
Brightswipe
类的各个模块(我想是?),像
Brightswipe::Main
Brightswipe::API
,等等。我只是将语句放在我的
app.rb
-中,它失败了,出现了相同的错误。从“模板被假定直接位于./views目录下。”您不必指定此选项,但如果指定,则应该是
set:views,./views”
,我建议您以任何一种方式设置:root,File.dirname(\uuuu File\uuuu)
@iain,我从
app.rb
设置root和views文件夹,它位于项目根目录中,但没有用。既然我不只是拥有相同的类
Brightswipe
(我使用
Brightswipe::Main
Brightswipe::API
,等等),那会有所不同吗?这解决了我的问题,但为什么?使用ruby app.rb工作正常,但unicorn显示了错误。当添加此选项时,@CodeGnome的可能副本不起作用,并且不太相关。顺便说一句,我见过的大多数Sinatra项目倾向于将所有特定于应用程序的代码放在项目根目录下的
应用程序中,因此在您的情况下
视图
公共
模型
助手
将位于
应用程序
目录下<代码>库保持在项目根目录下。你在
lib
目录中的所有应用程序代码都将在
app
中。应用程序不是库,因此布局不同。@iain,好吧,这是有道理的,但在我看来,Sinatra正在查看
lib/views
,因为核心代码在
lib
中,如果您在第一个需要的文件中进行了子类化,则不需要在随后需要的文件中表达子类。Hmmm。。。如果我有
Brightswipe::Main
Brightswipe::API
等等,这会起作用吗?或者我应该在每一个里面都有这个代码吗?这正是上面答案中所说的。
class MyApp < Sinatra::Base
  get "/blah" do
    "blah blah"
  end
end