Ruby slim尝试从错误路径渲染模板
我是ruby世界的新手,Sinatra也是如此,所以我别无选择,只能在这里询问我不断遇到的错误 我使用的是Rack+Sinatra与Slim的组合作为模板引擎。我的Ruby slim尝试从错误路径渲染模板,ruby,sinatra,slim-lang,Ruby,Sinatra,Slim Lang,我是ruby世界的新手,Sinatra也是如此,所以我别无选择,只能在这里询问我不断遇到的错误 我使用的是Rack+Sinatra与Slim的组合作为模板引擎。我的app.rb设置如下: module Pulsr class StylusHandler < Sinatra::Base set :views, File.dirname(__FILE__) + '/stylus' get '/css/styles.css' do stylus :styles end e
app.rb
设置如下:
module Pulsr
class StylusHandler < Sinatra::Base
set :views, File.dirname(__FILE__) + '/stylus'
get '/css/styles.css' do
stylus :styles
end
end
class Application < Sinatra::Base
register Sinatra::ConfigFile
config_file './config/config.yml'
use Pulsr::Api
use Pulsr::Routes
enable :logging, :dump_errors if Sinatra::Base.development?
disable :method_override, :run
set :public_folder, File.join(:root.to_s, 'static')
set :views, File.join(:root.to_s, 'views')
#set :static_cache_control, [:public, max_age: 60 * 60 * 24 * 365] if Sinatra::Base.production?
end
结束
因此,我的文件夹结构如下所示:
module Pulsr
class Routes < Sinatra::Base
get '/*' do
slim :index
end
end
- config
- config.yml
...
- controllers
- routes.rb
- views
- index.slim
- app.rb
- config.ru
- Gemfile
...
我得到了这个错误:没有这样的文件或目录@rb_sysopen-/Users/rolandjitsu/Projects/Products/pulsr/controllers/views/index.slim
其中模板实际上是以一个级别放在views
文件夹中的
以前我在
app.rb
文件中有所有的代码,而且正常情况下,它是有效的,但是现在我不确定如何解决这个路径问题。您已经将您的Routes
类设置为一个独立于主应用程序的Sinatra应用程序,这意味着它有自己的设置,不共享。因此,路由
应用程序的视图文件夹是该应用程序的默认文件夹,即控制器
目录中的视图
目录
解决此问题的简单方法是在Routes
类中指定views
目录
module Pulsr
class Routes < Sinatra::Base
# add this line
set :views, File.expand_path(File.join(__FILE__, '../../views'))
get '/*' do
slim :index
end
end
然后在主应用程序中调用
注册路由
,而不是使用路由
。这需要做的工作稍微多一些,但给了您更多的灵活性。我想这一定是设置的问题,因为我在我的routes.rb
文件中尝试了类似于set:views,File.expand\u path(File.join(\uu File\uu,../views'))
的东西,似乎我遇到了新的错误,但无法解析路径的错误已经消失。我想我更喜欢你的第二种方式。我之所以拆分文件,是因为我试图实现一种类似于MVC的体系结构。没错,我没有制作几个单独的应用程序,它只是一个,所有路由都将解析为索引,因为我将使用angular导航页面。@rolandjitsu我在回答中没有提到的东西:在你的问题中,你有set:views,File.join(:root.to.'s,'views')
,这是错误的–它将生成根/视图
。您可能打算使用应用程序根目录设置。默认值是视图
,因此您根本不需要该行。是的,我认为:root
将为我提供应用程序路径的根。有没有其他方法可以获取该字符串并附加所需的字符串?实际上,我的视图不需要它,但我的静态资产需要它,因为它们将位于默认的public
one@rolandjitsu只需使用root
(即no:
)。设置作为类范围内的方法提供,在路由内,您需要使用设置。root
@rolandjitsu另一个选项是从不同的文件重新打开主应用程序类,并向其中添加路由等。以另一个问题为例:
module Routes # N.B modle not class
# in this method you can add routes to the main app
def self.registered(app)
# you need to use 'app.get', not plain 'get'
app.get '/*' do
slim :index
end
end
end