标签: sinatra

无法在生产中调试Sinatra应用程序

我正在使用乘客部署Sinatra应用程序.已部署的应用程序正在运行,但并非完全有效:某些路径工作正常,其他路径只是呈现空白页面.我似乎无法找到工作路线和没有工作的路线之间的任何重大差异,我似乎无法追查任何错误..

处理程序

我已经定义了not_found和错误处理程序,如下所示:

not_found do
  '404. Bummer!'
end

error do
  'Nasty error: ' + env['sinatra.error'].name
end
Run Code Online (Sandbox Code Playgroud)

这些在我的本地机器上工作正常,无论是在开发还是生产中,但我从未在服务器上看到这些.

Apache日志

当我拖拽Apache的access.log并点击其中一条破碎的路径时,我看到500:

helpers [27/Oct/2009:15:54:59 -0400] "GET /admin/member_photos/photos HTTP/1.1" 500 20 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3"
Run Code Online (Sandbox Code Playgroud)

rack_hoptoad

我还在我的config.ru中安装并配置了rack_hoptoad中间件,但没有例外,它正在跳转到hoptoad.

# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
Run Code Online (Sandbox Code Playgroud)

记录

我已经设置了这样的日志..

set :raise_errors => true
set :logging, true

log = File.new("log/sinatra.log", "a+")
STDOUT.reopen(log)
STDERR.reopen(log)

require 'logger'
configure do
  LOGGER = Logger.new("log/sinatra.log") 
end

helpers do
  def …
Run Code Online (Sandbox Code Playgroud)

ruby debugging rack passenger sinatra

11
推荐指数
1
解决办法
3126
查看次数

为什么我的sinatra网站这么慢?

在提出这个问题后,我开始使用Sinatra作为服务网页的方式.

今天晚上,我和我的一个朋友开始测试服务器的速度.

要登录的文件如下所示:

require 'rubygems'
require 'sinatra'
require 'haml'

enable :sessions #for cookies!

get '/' do 
  haml :index 
end
Run Code Online (Sandbox Code Playgroud)

而index.haml看起来像:

%title
  First Page

%header 
  %h2 First Page
Run Code Online (Sandbox Code Playgroud)

他和我一样坐在最近的笔记本电脑上,我们两人之间有一台Apple 802.11n路由器.我们都在运行Windows 7.我还在运行Ubuntu 9.10 x64的笔记本电脑上尝试了这些相同的文件,其中包含Sinatra和从apt-get安装的所有相关文件.

无论是服务器操作系统,Windows还是Linux,Sinatra都需要7秒钟来提供单页请求.我看到作者设法在这里处理了400多个请求/秒.是什么赋予了?(或者应该在SuperUser等上?)

performance sinatra

11
推荐指数
2
解决办法
7443
查看次数

如何为独立的Sinatra应用启用SSL?

我想在Sinatra写一个快速的服务器应用程序.它必须是自包含的(即不使用apache/nginx/passenger),但也必须支持SSL.

有没有简单的方法为Sinatra启用SSL支持(例如使用WEBRick)?

ruby ssl webrick sinatra

11
推荐指数
1
解决办法
4914
查看次数

在Ruby中逐个像素地读取图像

我正在尝试打开一个图像文件,并在变量/数组中按颜色存储像素列表,这样我就可以逐个输出它们.

图像类型:可以是BMP,JPG,GIF或PNG.其中任何一个都很好,只需要支持一个.颜色输出:RGB或Hex.

我看过几个库(RMagick,Quick_Magick,Mini_Magick等),它们看起来都有些过分.Heroku在ImageMagick上也遇到了一些困难,我的测试也没有运行.我的申请是在Sinatra.

有什么建议?

ruby imagemagick heroku sinatra

11
推荐指数
2
解决办法
1万
查看次数

如何计算ruby服务器中的运行线程

我想在Sinatra Web服务器的线程中执行"长时间运行" - (执行大约0.5秒)任务.

Web响应大约需要20毫秒,所以如果我忙,那么线程就会堆积起来......

所以我觉得如果我忙的话我会同步.

if (running_thread_count > 10)
    stuff_that_takes_a_second()
else
    Thread.new do
        stuff_that_takes_a_second()
    end
end
Run Code Online (Sandbox Code Playgroud)

你如何获得正在运行的线程数(我想要启动的线程数,还没有运行) - 你如何编码running_thread_count?

def running_thread_count
 return Thread.list.count
end
Run Code Online (Sandbox Code Playgroud)

或者我是否需要检查正在运行的线程?即当一个线程完成运行时,它是否会停止回到Thread.list中?

我不想调用join,因为这会破坏目的 - 除非我们备份大量的线程工作,否则快速返回.

ruby multithreading sinatra

11
推荐指数
1
解决办法
7907
查看次数

如何使用ng-checked预先选择angularJs中的复选框

我似乎无法让这个工作.所以我有很多类型的电影,如果那些是用户数据库中的类型,我希望它们被检查.这是我的代码


%section(ng-controller="UserCtrl" ng-init="user_genres=#{preferred_genres}")
    %ul
         %li(ng:repeat="genre in preferred_genres")
            %input(type = "checkbox" ng:model="preferred_genres[genre]" id="genre-{{$index + 1}}" ng-checked="user_genres['{{genre}}']")
            %label{:for => "genre-{{$index + 1}}"} {{genre}}

这是#{preferred_genres}来自haml


{"Action & Adventure":true,"Animation":true,"Art House & International":true,"Classics":true,"Comedy":true,"Documentary":true,"Drama":true,"Horror":true,"Kids & Family":true,"Musical & Performing Arts":true,"Mystery & Suspense":true,"Romance":true,"Science Fiction & Fantasy":true,"Special Interest":true,"Sports & Fitness":true,"Television":true,"Western":true}

这意味着应该检查每个复选框.但是,当我加载页面时,没有选中复选框.但是,如果我硬编码ng-checked成这样的东西就可以了.


ng-checked="user_genres['Western']"

这真的很奇怪.请帮忙.

javascript ruby haml sinatra angularjs

11
推荐指数
1
解决办法
2万
查看次数

无法激活sinatra-1.4.7,因为rack-2.0.1与rack冲突(〜> 1.5)

我刚刚将我的操作系统从Ubuntu 14.04 LTS更新到16.04,我在那里运行我的Ruby Sinatra项目.事情是更新后我试图运行服务器,然后在浏览器中的localhost我得到此错误启动错误

Something went wrong while loading app.rb
Gem::ConflictError: Unable to activate sinatra-1.4.7, because rack-2.0.1 conflicts with rack (~> 1.5)

/usr/lib/ruby/2.3.0/rubygems/specification.rb:2286:in `raise_if_conflicts'
/usr/lib/ruby/2.3.0/rubygems/specification.rb:1407:in `activate'
/usr/lib/ruby/2.3.0/rubygems.rb:196:in `rescue in try_activate'
/usr/lib/ruby/2.3.0/rubygems.rb:193:in `try_activate'
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:125:in `rescue in require'
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
/home/leandro/Downloads/git-master/ruby sinatra/app.rb:1:in `<top (required)>'
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/loader.rb:115:in `inner_app'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/loader.rb:103:in `assemble_app'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/loader.rb:86:in `proceed_as_child'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/loader.rb:31:in `call!'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/loader.rb:18:in `call'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/favicon.rb:12:in `call'
/var/lib/gems/2.3.0/gems/shotgun-0.9.1/lib/shotgun/static.rb:14:in `call'
/var/lib/gems/2.3.0/gems/rack-2.0.1/lib/rack/urlmap.rb:68:in `block in call'
/var/lib/gems/2.3.0/gems/rack-2.0.1/lib/rack/urlmap.rb:53:in `each'
/var/lib/gems/2.3.0/gems/rack-2.0.1/lib/rack/urlmap.rb:53:in `call'
/var/lib/gems/2.3.0/gems/rack-2.0.1/lib/rack/builder.rb:153:in `call'
/var/lib/gems/2.3.0/gems/rack-2.0.1/lib/rack/handler/webrick.rb:86:in `service'
/usr/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/usr/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/usr/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread' …
Run Code Online (Sandbox Code Playgroud)

rack rubygems sinatra

11
推荐指数
2
解决办法
4005
查看次数

如何在我的Sinantra应用程序/环境下运行Rake任务?

我正在使用Sinatra,我想设置一些Rails具有的便利rake任务,特别是rake db:seed.

我的第一关是这个:

namespace :db do
  desc 'Load the seed data from db/seeds.rb'
  task :seed do
    seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb')
    system("racksh < #{seed_file}")
  end
end
Run Code Online (Sandbox Code Playgroud)

racksh是一个模仿Rails控制台的宝石.所以我只是将种子文件中的代码直接输入它.它有效,但显然不理想.我想做的是创建一个环境任务,允许命令在Sinanta应用程序/环境下运行,如下所示:

task :environment do
  # what goes here?
end

task :seed => :environment do
  seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb')
  load(seed_file) if File.exist?(seed_file)
end
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何设置环境,以便rake任务可以在其下运行.任何帮助将非常感激.

ruby rake ruby-on-rails sinatra

10
推荐指数
1
解决办法
5387
查看次数

在Sinatra的自定义错误块中设置状态代码

我有400状态代码的自定义错误消息:

get '/do' do
  raise ParamXMissingError unless params['x']
end

error ParamXMissingError do
  haml :custom_error_page
end
Run Code Online (Sandbox Code Playgroud)

我希望ParamXMissingError为400,但是当我运行上面的代码,并通过Firefox网络工具检查时,似乎Sinatra实际上返回500而不是400.如何让它显示custom_error_page.haml并返回400?

最好是从错误块中处理状态代码和页面是很好的,而不是我在提升时会撒上的东西ParamXMissingError.例如,这将是重复的,并不是一个好的解决方案:halt 400, haml(:custom_error_page)

ruby rack sinatra http-status-code-301

10
推荐指数
1
解决办法
5551
查看次数

空的,不可编辑的pg_hba.conf文件

我正在尝试使用本教程将我的Sinatra应用程序连接到PostgreSQL数据库:http://samuelstern.wordpress.com/2012/11/28/making-a-simple-database-driven-website-with-sinatra-and-heroku /.一切顺利,直到我尝试执行:

rake:db migrate
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

rake aborted!
PG::ConnectionBad: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)

好像我应该在pg_hba.conf文件中更改我的权限,但是,打开它,我什么也看不见.并且,如果我尝试在其中写入内容,它会说它是" 只读 ".

我是否正确摆脱错误以及下一步该走向何方?

编辑:实际上,如果我尝试从另一个文本编辑器打开它,它说我没有权限.

authentication postgresql sinatra

10
推荐指数
1
解决办法
3918
查看次数