gpt4 book ai didi

ruby - Sinatra 中的奇怪问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:37 25 4
gpt4 key购买 nike

好吧,这很奇怪(对我来说是这样),我的 master 分支中的一切工作正常,然后我创建了一个名为 twitter 的新分支来执行一些 twitter 提要实现。我已经完成了这个并且昨天在我的 linux 机器上工作。我今天在 Windows 环境中拉了分支但是当我加载应用程序时我现在得到常规的 Sinatra 404 Sinatra 不知道这个小事。

这是我的profile.rb文件

require 'bundler/setup'
Bundler.require(:default)
require 'rubygems'
require 'sinatra'
require './config/config.rb' if File.exists?('./config/config.rb')
require 'sinatra/jsonp'
require 'twitter'
require 'sinatra/static_assets'


class Profile < Sinatra::Base

helpers Sinatra::Jsonp
enable :json_pretty
register Sinatra::StaticAssets

@@twitter_client = Twitter::Client.new(
:consumer_key => ENV["CONSUMER_KEY"],
:consumer_secret => ENV["CONSUMER_SECRET"],
:oauth_token => ENV["OAUTH_TOKEN"],
:oauth_token_secret => ENV["OAUTH_SECRET"],
)


get '/' do
erb :index
end


get '/feed' do
jsonp @@twitter_client.user_timeline('richl14').map(&:attrs)
end


end

配置.ru

  require './profile'

run Profile

有没有人知道我需要关注什么来解决这个问题?任何人都可以从这方面的经验谈谈吗?

谢谢

最佳答案

当您使用经典的 Sinatra 样式时,您使用 require 'sinatra' 然后将路由添加到顶层。这些路由被添加到 Sinatra::Application 中。当您直接运行此文件时,例如使用 ruby my_app.rb,Sinatra 运行一个内置的网络服务器,它将为 Sinatra::Application 应用程序提供服务。

当您使用模块化风格时,您使用require 'sinatra/base',然后将路由添加到您的Sinatra::Base 子类。在这种情况下,直接执行文件不会启动内置服务器。

在您的情况下,您使用的是模块化样式,但使用了require 'sinatra'。您创建了您的 Profile 应用程序,但是当您直接运行该文件时,Sinatra 会启动内置服务器并为 Sinatra::Application 应用程序提供服务。由于您没有为此添加任何路由(它们都已添加到 Profile)它运行但所有请求都返回 404。

让您的应用启动的一种方法是使用 rackup。这将启动您在 config.ru 中明确设置的 Profile 应用程序。 (显式启动您的网络服务器也可以,例如使用 thin start)。

另一种可能是在 Profile 类的末尾添加这样一行:

run! if app_file == $0

如果文件与正在执行的 Ruby 文件相同,这会告诉 Sinatra 在运行 Profile 应用程序的服务器中启动构建,这与经典风格应用程序的启动方式类似。如果您使用此方法,您应该将 require 'sinatra' 更改为 require 'sinatra/base' 否则您将启动两台 服务器,一个在另一个(事实上,无论如何您都应该进行更改)。

参见 Sinatra docs for more info about the difference between classic and modular style .

关于ruby - Sinatra 中的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17147449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com