Ruby Sinatra应用程序不会重定向到haml文件

Ruby Sinatra应用程序不会重定向到haml文件,ruby,twitter,sinatra,Ruby,Twitter,Sinatra,这是我写的Sinatra代码。所有的gems都存在,ruby文件编译得非常完美,但当我转到localhost:4567/时,sinatra应用程序无法运行。它把我带到了“Sinatra不知道这首小曲”页面。我在这里犯了什么错误?这是一个语法问题吗?我已经在这里发布了主要ruby文件的代码,其他只是haml文件,仅此而已 require 'bundler' Bundler.setup(:default) require 'sinatra' require 'haml' require 'twit

这是我写的Sinatra代码。所有的gems都存在,ruby文件编译得非常完美,但当我转到localhost:4567/时,sinatra应用程序无法运行。它把我带到了“Sinatra不知道这首小曲”页面。我在这里犯了什么错误?这是一个语法问题吗?我已经在这里发布了主要ruby文件的代码,其他只是haml文件,仅此而已

require 'bundler'
Bundler.setup(:default)

require 'sinatra'
require 'haml'
require 'twitter'
require 'oauth'

class MyTweetWeek < Sinatra::Base
  set :haml, :format => :html5, :attr_wrapper => '"'
 enable :sessions, :static, :raise_errors
 set :public_dir, File.join(File.dirname(__FILE__), 'public')

 get '/' do
   haml :index
 end

 get '/login' do
request_token = consumer.get_request_token(:oauth_callback => ENV['OAUTH_CALLBACK'])

session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret

redirect request_token.authorize_url
 end

  get '/oauth_callback' do
request_token = OAuth::RequestToken.new(
  consumer,
  session[:request_token],
  session[:request_token_secret]
)

session[:request_token] = session[:request_token_secret] = nil

access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])

session[:access_token] = access_token.token
session[:access_secret] = access_token.secret

redirect '/resume'
 end

  get '/resume' do
redirect '/'  unless authenticated?
today = Date.today #get today's date
monday = today - today.cwday + 1 #calculate Monday
search = Twitter::Search.new

@screen_name = client.verify_credentials.screen_name
@number_of_tweets = 0
@number_of_mentions = 0

results = search.from(@screen_name)
                .since_date(monday)
                .no_retweets
                .per_page(100)
                .fetch

@number_of_tweets += results.size

while search.next_page?
  results = search.fetch_next_page
  @number_of_tweets += results.size
end

search.clear

results = search.q("@#{@screen_name.gsub('@', '')}")
                .since_date(monday)
                .no_retweets
                .per_page(100)
                .fetch

@number_of_mentions += results.size

while search.next_page?
  results = search.fetch_next_page
  @number_of_mentions += results.size
end

haml :resume
 end

 error Twitter::Error::Unauthorized do
    redirect '/'
    end

 not_found do
  haml :not_found
  end

 private

 def consumer
   @consumer ||= OAuth::Consumer.new(
    ENV['CONSUMER_KEY'],
    ENV['CONSUMER_SECRET'],
    :site => "https://api.twitter.com"
    )
 end

  def client
   Twitter.configure do |config|
    config.consumer_key = ENV['CONSUMER_KEY']
    config.consumer_secret = ENV['CONSUMER_SECRET']
    config.oauth_token =  session[:access_token]
    config.oauth_token_secret = session[:access_secret]
    end

@client ||= Twitter::Client.new
end

 def authenticated?
  !session[:access_token].nil? && !session[:access_secret].nil?
    end
    end
需要“bundler”
Bundler.setup(:默认值)
需要“sinatra”
需要“haml”
需要“推特”
需要“oauth”
类MyTweetWeek:html5,:attr_wrapper=>“'
启用:会话、:静态、:引发错误
set:public\u dir,File.join(File.dirname(\uu File\uu),'public')
获取“/”do
haml:索引
结束
获取“/login”do
request\u token=consumer.get\u request\u token(:oauth\u callback=>ENV['oauth\u callback'])
会话[:请求\u令牌]=请求\u令牌.token
会话[:request\u token\u secret]=request\u token.secret
重定向请求\u令牌。授权\u url
结束
获取“/oauth\u callback”do
request_token=OAuth::RequestToken.new(
消费者,
会话[:请求\u令牌],
会话[:请求\u令牌\u秘密]
)
会话[:request\u token]=会话[:request\u token\u secret]=nil
访问令牌=请求令牌。获取访问令牌(:oauth\u验证器=>参数[:oauth\u验证器])
会话[:访问令牌]=访问令牌.token
会话[:access\u secret]=access\u token.secret
重定向“/恢复”
结束
获取“/resume”do
除非经过身份验证,否则是否重定向“/?
今天=日期。今天#获取今天的日期
星期一=今天-今天.cwday+1#计算星期一
search=Twitter::search.new
@screen\u name=client.verify\u credentials.screen\u name
@推文数量=0
@提到的次数=0
结果=搜索.from(@screen\u name)
.自年月日(星期一)起
.无转发
.每页(100)
取来
@tweets的数量+=results.size
当搜索时。下一页?
结果=search.fetch\u下一页
@tweets的数量+=results.size
结束
搜索,清除
results=search.q(“@#{@screen_name.gsub('@','')}”)
.自年月日(星期一)起
.无转发
.每页(100)
取来
@提及次数+=结果大小
当搜索时。下一页?
结果=search.fetch\u下一页
@提及次数+=结果大小
结束
汉默:简历
结束
错误Twitter::错误::未经授权的do
重定向“/”
结束
你找不到吗
没有找到
结束
私有的
def耗电元件
@consumer | |=OAuth::consumer.new(
环境[“消费者密钥”],
环境[‘消费者秘密’],
:site=>“https://api.twitter.com"
)
结束
def客户端
Twitter.configure do | config|
config.consumer\u key=ENV['consumer\u key']
config.consumer\u secret=ENV['consumer\u secret']
config.oauth_token=会话[:访问_token]
config.oauth\u token\u secret=会话[:访问\u secret]
结束
@client | |=Twitter::client.new
结束
def认证?
!session[:access\u token]。nil?&&!session[:access\u secret]。nil?
结束
结束

由于您有一个模块化应用程序,您是否需要“sinatra/base”而不是“sinatra”"? 请参见查看并添加行
运行!如果app_file==$0
在课程结束时。另请参见DavB的答案。

您是如何从命令行运行此命令的
ruby app.rb
rackup config.ru
?ruby app.rb是我从命令行运行它的方式。@iain,为什么会发生这种情况?