Tag: sinatra

Sinatra:使用bundle exec ruby​​ app.rb时未定义的方法’run’

我有模块化风格的sinatra应用程序,接近结尾的以下行,以便它可以独立运行: # … all code before this omitted run! if __FILE__ == $0 end # This is the end of the file 当我用ruby app.rb运行这个应用程序时,它工作正常,webrick启动。 但是,如果我使用bundle exec ruby app.rb运行它,我会收到此错误: >bundle exec ruby app.rb C:/Ruby200/lib/ruby/gems/2.0.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1488:in `start_server’: undefined method `run’ for HTTP:Module (NoMethodError) from C:/Ruby200/lib/ruby/gems/2.0.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1426:in `run!’ 是什么导致了这个错误?

在Sinatra的路线之间传递变量

我正在Sinatra网站上实现注册的smsvalidation,我得到了这个代码: post ‘/reg’ do phone = params[:phone].to_s code = Random.rand(1000..9999).to_s HTTParty.get(‘http://sms.ru/sms/send?api_id=’ + api_id + phone + ‘&text=’ + code) end 这将用户电话从发布请求中获取,而不是生成4位数代码,并通过获取请求向短信服务发送代码。 但是,页面没有重新加载,因为此时打开modal dialog,用户应该键入代码 。 打开模态的按钮同时使用以下代码通过Ajax发送post : $(document).ready(function(){ $(“#sendsms”).click(function(){ var phone = $(“#phone”).val(); $.ajax({ url: “/coop”, data: {“phone”: phone}, type: “post” }); }); }); 在客户端检查用户代码会很奇怪,这就是为什么我有这个行动路线: post ‘/coop/checkcode’ do usrcode = params[:code] if code == usrcode redirect […]

Sinatra:’/ route’中的NameError,未定义的局部变量或方法

我正在尝试为cms网站建立一个管理员后端。 这是我的应用程序的结构 ├── app.rb ├── Gemfile ├── models │ └── models.rb ├── routes │ └── routes.rb └── views ├── categories.erb ├── # … other view files app.rb require ‘sinatra’ require ‘data_mapper’ require ‘dm-core’ require ‘dm-migrations’ require ‘digest’ enable :sessions DataMapper.setup(:default, ‘mysql://username:password@localhost/database’) require ‘./models/models.rb’ require ‘./routes/routes.rb’ DataMapper.finalize models.rb class Category include DataMapper::Resource property :id, Serial property […]

如何在Sinatra应用程序(+ unicorn)中存储/访问/更新线程安全变量?

我想在我的sinatra应用程序中以线程安全的方式存储和更新Enum。 我用独角兽。 我尝试了以下方法: #!/usr/bin/ruby require ‘sinatra’ $locked = false $num = 0 class App < Sinatra::Base before do while $locked do end $locked = true end after do $locked = false end get "/wait" do sleep 10 $num += 1 erb :display end get "/winner" do $num += 1 erb :display end end 视图只显示$ num;) […]

Sinatra Logger的Web服务错误

我正在使用Sinatra 1.3 ,它是一个Sinatra::Application 。 我有一个获取Web服务的方法。 我想记录此服务何时成功以及它在后台运行时失败的原因(cron作业) def fetch_some_web_service begin #if successful log.info “Success” rescue SocketError => e log.info “Failed” end end 我似乎无法使用Sinatra logger instance 。 它为我生成错误,我假设它正在这样做,因为我正在登录一个方法,而不是在一个路径中? 使用Sinatra::Application捕获某些日志文件中的errors和success的最佳方法是什么

SWIG:Ruby重载问题

我有一个sinatra Web应用程序和一个C ++库,我可以使用swig创建的绑定在sinatra(ruby)中“需要”。 我还有第二个非常类似的库,其中的函数名称与第一个函数名称部分相同。 当我同时需要它们时,首先加载的那个’获胜’,即对模糊函数名称的调用总是映射到该库。 原因是’require’只加载尚未加载的东西,而’load’无论如何都会加载。 但是,’load’似乎不适用于.so文件,仅适用于ruby源文件。 有帮助吗? 谢谢

从html表单提交运行Ruby文件

我有一个Ruby程序,它读取一个文件并返回一个特定的输出。 我现在必须使用Sinatra创建该程序的Web应用程序。 我创建了一个包含所有文件选项的form ,现在我想在按下提交按钮后从表单中运行该选定文件的Ruby代码。 基本上,我不确定如何让这个外部Ruby程序与用户从HTML form选择的文件名一起运行。 Ruby程序( example.rb )以定义def read_grammar_defs(filename) 。 // sinatra_main.rb require ‘sinatra’ require ‘sinatra/reloader’ if development? #gem install sinatra-contrib require ‘./rsg.rb’ get ‘/’ do erb :home end post ‘/p’ do //call program to read file with the parameter from form end // layout.erb RubyRSG Demo Select grammar file to create randomly generated […]

派生的Activerecord Ruby类

我对ruby完全不熟悉。 我正在尝试为任务跟踪应用程序创建RESTful服务。 我研究并发现Sinatra比铁路更好。 所以我使用的是Sinatra和ActiveRecord。 我正在跟随Sinatra和ActiveRecord运行 。 我将使用Restsharp在.NET中创建客户端应用程序。 但这都是关于服务器端的。 这是我创建的迁移 class CreateTasksPeopleDocumentsAndComments < ActiveRecord::Migration def self.up create_table :tasks do |t| t.string :name t.string :task_status t.string :task_type t.text :description t.text :analysis t.text :investigation t.integer :developer_id t.integer :reviewer_id t.date :open_date t.date :analysis_date t.date :promotion_date t.date :review_date t.date :correction_date t.date :collection_date t.date :closed_date t.date :modified_date t.date :target_date end create_table […]

HTTP调用在本地与AWS的行为不同 – 是ruby还是AWS?

我写的API有一个奇怪的问题。 API已经使http获取对其他服务的请求,并在某些情况下超时 – 在大多数情况下,其他服务关闭/无法访问。 我正在尝试完全在AWS上运行系统,但是当在那里运行API时,我会经常尝试访问同一实例上的服务。 API是用ruby + sinatra编写的; 我从来没有遇到过它的python前辈的问题。 如果我从AWS实例命令行curl其他服务的URL,我永远不会得到超时。 当我在本地运行API(AWS上的其他服务)时,它每次运行都很好。 最初我认为它可能是我正在使用的http库 – net / http,甚至在本地也存在问题。 切换到open-uri或rest-client修复了所有本地问题,但是当我在AWS上运行时,我仍然会有20%的时间超时。 API是ruby + sinatra,使用open-uri来执行http请求。 其他服务是ruby + sinatra或java。 我正在运行一个32位的Amazon Linux小实例,ruby 1.9.3,java 1.6; 我的本地机器是Mac with Snow Leopard,带有ruby 1.9.3和java 1.6。 任何想法或提示,以进一步缩小可能发生的事情? 更新:我的大sinatra应用程序和小sinatra应用程序表现不同!? 我的sinatra应用程序的测试版本调用我的java服务,都在AWS上运行……工作正常。 require ‘rubygems’ require ‘uri’ require ‘open-uri’ require ‘sinatra’ set :port, 6969 get ‘/wtf’ do xid = params[:xid] state = […]

Sinatra的子路由

有没有办法可以将不同的控制器映射到彼此相关的URL,特别是当一个是另一个的子资源时? 更具体地说,这是一个例子: 我有两种类型的资源: jobs和articles 。 job包含多articles 。 尽管他们有关系,但我想在单独的文件中处理与每个相关的实际代码。 因此,我有: helpers/job_api.rb和 helpers/article_api.rb 他们每个都像这样扩展SinatraBase: class ArticleAPI < Sinatra::Base register Sinatra::Async get '/list' do #… end end 我现在想要的是将所有属于作业的URL请求映射到JobAPI和属于文章的JobAPI (但仍然始终与ArticleAPI的单个作业相关联)。 我的config.ru看起来像这样: $ LOAD_PATH <<'。' 需要'服务器' map “/” do run Sinatra::Application end map “/job” do run JobAPI end map “/job/:job_id/article” do run ArticleAPI end 但是,当我尝试转到url /job/12/article/list时,这不起作用。 有人知道有没有办法做到这一点? 谢谢