标签: sinatra

Ruby 应用程序仅在乘客被“禁用”时工作

我已经使用 Apache 和Passenger 在Ubuntu 服务器上部署了一个Sinatra 应用程序。通过一些试验和错误,我意识到该应用程序仅在禁用乘客模块时才有效。

$ a2dismod passenger
Run Code Online (Sandbox Code Playgroud)

Apache 重新启动后,应用程序按预期运行。

如果我重新启用模块...

$ a2enmod passenger
Run Code Online (Sandbox Code Playgroud)

...我在 Apache 重新启动时看到此警告:

[warn] module passenger_module is already loaded, skipping
Run Code Online (Sandbox Code Playgroud)

并且应用程序停止工作。Apache 做出响应,提供 vhost 文档根目录的内容,但没有被Passenger 识别。

我很高兴我的应用程序可以工作,但我不确定如何解释启用/禁用乘客模块的相反效果。

ruby apache2 passenger sinatra

4
推荐指数
1
解决办法
4468
查看次数

Rails与Sinatra进程内存使用情况?

有人可以评论转移到Sinatra的每个过程的改进吗?

我发现我的Web API每个Passenger Rails 3进程使用大约100MB.我想知道如果我换到Sinatra会有什么改进.

memory ruby-on-rails sinatra

4
推荐指数
1
解决办法
2061
查看次数

使用Ruby + Webrick + Sinatra,'开发'在哪里?方法来自哪里?

使用ruby + webrick + sinatra时,'开发模式'的概念来自哪里?

require 'sinatra'
require 'sinatra/reloader'

get '/test' do
  development?.to_s
end
Run Code Online (Sandbox Code Playgroud)

当我通过'ruby test.rb -p 3000'运行上述应用时,http:// localhost:3000/test返回"true"...但为什么它会返回true?开发模式是ruby,webrick,rack还是sinatra概念?此外,此功能是否记录在任何地方,特别是以非特定于轨道的方式?我发现很多人都参考了开发模式的概念,但我一直惊讶于找到相关信息的难度......也许我只是没有谷歌正确的关键词......

ruby rack sinatra development-mode

4
推荐指数
1
解决办法
1526
查看次数

Erb 视图中不需要的空格

这是我的 sinatra 代码:

get '/' do
    foo = 'not bar'
    erb :index
end
Run Code Online (Sandbox Code Playgroud)

我的 layout.erb

<html>
  <head></head>
  <body>
    <%= yield %>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的 index.erb

<div class="container">
</div>
Run Code Online (Sandbox Code Playgroud)

现在的问题是 问题的屏幕截图

额外的文字(用黄色突出显示)干扰了我的设计 知道为什么会这样吗?如果我不使用布局并且仅将 index.erb 与所有 html 代码一起使用,则不会发生这种情况

[编辑:] 使用 <%= yield -%> 在 ....

ruby erb sinatra

4
推荐指数
1
解决办法
5416
查看次数

数据库连接池

我在Sinatra中创建了一个小聊天应用程序,在heroku上创建了jQuery.它只是在用户提交时将消息插入数据库.并且还每2秒下载一次新消息.经过几分钟的测试后,它停止工作,我收到了一封heroku的电子邮件:

嗨,

我们注意到gisekchat应用程序有大量连接打开共享数据库.由于性能原因,我们必须限制共享数据库的连接数.您是否可以减少共享数据库的总连接数或移动到专用数据库?

您似乎没有利用连接池,并且正在为应用程序中的每个请求打开与数据库的新连接.

谢谢,-Chris

这是支持提交消息的动作(接收非常相似):

post '/send' do
  con = con = PGconn.connect($dbhost, 5432, "","",$dbname, $dbuser, $dbpass)
  con.exec("insert into messages(usr, msg, date) values('#{params[:usr]}','#{params[:msg]}', now())")    
end
Run Code Online (Sandbox Code Playgroud)

我该如何更改它以启用连接池?

ruby database sinatra

4
推荐指数
1
解决办法
4319
查看次数

我可以使用Sinatra的POST请求模拟PUT或DELETE请求吗?

有些Web浏览器无法发出PUT或DELETE请求,但我需要使用Sinatra将这些请求转换为使用Ruby编写的REST服务.是否有可能使Sinatra将POST请求解释为PUT或DELETE请求?

html ruby rest http sinatra

4
推荐指数
1
解决办法
1415
查看次数

多个工作线程在同一个数据库上工作-如何使其正常工作?

我有一个数据库,其中包含需要操作的行的列表。看起来像这样:

id       remaining        delivered   locked
============================================
1        10               24          f 
2        6                0           f
3        0                14          f
Run Code Online (Sandbox Code Playgroud)

我将DataMapper与Ruby结合使用,但实际上我认为这是一个通用的编程问题,并不特定于我正在使用的确切实现...

我正在创建一堆工作线程,它们执行以下操作(伪红代码):

while true do
  t = any_row_in_database_where_remaining_greater_than_zero_and_unlocked
  t.lock   # update database to set locked = true
  t.do_some_stuff
  t.delivered += 1
  t.remaining -= 1
  t.unlock
end
Run Code Online (Sandbox Code Playgroud)

当然,问题是,这些线程相互竞争,并且整个线程并不是真正安全的。while循环中的第一行可以轻松地在多个线程中拉出同一行,然后才有机会被锁定。

我需要确保一个线程只能同时在一行上工作。

做这个的最好方式是什么?

ruby ruby-on-rails datamapper sinatra

4
推荐指数
1
解决办法
1707
查看次数

Sinatra全局应用程序变量

我有一个简单的Sinatra应用程序,我想在所有会话和请求中共享变量.

configure do
  @@click_count = 0
end

def send_message(text)
  # ignore, this part works
end

post '/click' do
  @@click_count = @@click_count + 1
  send_message "clicks: #{@@click_count}"
end
Run Code Online (Sandbox Code Playgroud)

发送的消息始终clicks: 1不是递增.我也试过set :click_count, 0,settings.click_count = settings.click_count + 1但我仍然得到同样的东西.

我用猎枪使用本地运行的服务器shotgun web.rb -p 4567 -E production,因为在非生产提到的另一个问题环境中,服务器是失去状态的每个请求重新启动.

任何想法如何让这个工作?

ruby sinatra

4
推荐指数
1
解决办法
3733
查看次数

Sinatra 单元测试 - 使用 JSON 正文发布

我正在尝试为我使用 Sinatra 构建的 REST API 构建单元测试。现在我只想测试我的回声功能是否正常工作。Echo 使用 POST 并将从帖子中返回完全相同的有效负载。我对 ruby​​ 还是个新手,所以如果我不使用正确的术语,请原谅我。

这是我要测试的代码:

post '/echo' do
  request.body.read
end
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试进行的单元测试:

ENV['RACK_ENV'] = 'test'
require './rest_server'
require 'test/unit'
require 'rack/test'
require 'json'

class RestServer < Test::Unit::TestCase

  def app
    Sinatra::Application
  end

  def test_check_methods
    data = '{"dataIn": "hello"}'
    response = post '/echo', JSON.parse(data)
    assert.last_response.ok?
    assert(response.body == data)
  end
end
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,这里是错误:

NoMethodError: undefined method `dataIn' for Sinatra::Application:Class
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1285:in `block in compile!'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1285:in `each_pair'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1285:in `compile!'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1267:in `route'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1256:in `post'
    /Users/barrywilliams/.rvm/gems/ruby-1.9.3-p448/gems/sinatra-1.3.4/lib/sinatra/base.rb:1688:in `block (2 levels) in delegate'
    /Users/barrywilliams/RubymineProjects/project/rest_server_test.rb:20:in …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing sinatra rack-test

4
推荐指数
2
解决办法
7401
查看次数

这个文件config.ru是什么,它的作用是什么?

这个文件config.ru是什么,在Sinatra项目中有什么用?在我的项目挂绳中,编写了这样的代码:

require './app'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

4
推荐指数
3
解决办法
2060
查看次数