Ruby 呼叫Sinatra';s来自Sinatra扩展的DSL方法
我有一个模块化的Sinatra应用程序,正在寻找从其他模块内部调用Sinatra API级方法(如Ruby 呼叫Sinatra';s来自Sinatra扩展的DSL方法,ruby,web-applications,module,sinatra,modular,Ruby,Web Applications,Module,Sinatra,Modular,我有一个模块化的Sinatra应用程序,正在寻找从其他模块内部调用Sinatra API级方法(如get())的最直接的方法。我想西纳特拉扩展就是它,但有些东西不起作用 这是导入所有其他模块的主文件: app/app.rb require 'sinatra/base' Dir[File.join(__dir__, 'articles', '*.rb')].each { |file| require file } module Tir class App < Sinatra::Base
get()
)的最直接的方法。我想西纳特拉扩展就是它,但有些东西不起作用
这是导入所有其他模块的主文件:
app/app.rb
require 'sinatra/base'
Dir[File.join(__dir__, 'articles', '*.rb')].each { |file| require file }
module Tir
class App < Sinatra::Base
register Sinatra::Blog
get '/articles' do
articles = parse_articles('articles/*.mdown')
end
end
end
module Sinatra
module Blog
ARTICLES = []
def parse_articles(dir)
Dir.glob(dir) do |file|
article = initialize_article file
if article.ready?
generate_path(article)
ARTICLES << article
end
end
end
def generate_path(article)
get("/#{article.relative_path}") do
erb :'articles/article',
:locals => { :article => article },
:layout => :'articles/layout_article'
end
end
end
register Blog
end
config.ru
require 'rubygems'
require 'bundler'
Bundler.require
require_relative 'app/app'
run Tir::App
当我运行这个程序时,我得到了#的未定义方法“parse_articles”
什么不在这里?谢谢。这对我来说似乎是正确的,运行此程序时发生了什么?对不起,我的问题有点误导。不起作用的不是get()方法,而是扩展方法。我已经相应地修改了源代码清单。当我运行上面的程序时,我得到了“未定义的方法`parse#articles'for#”,这对我来说似乎是正确的,运行这个程序时发生了什么?对不起,我的问题有点误导。不起作用的不是get()方法,而是扩展方法。我已经相应地修改了源代码清单。当我运行上面的程序时,我得到了“未定义的方法'parse_articles'for#”