我想使用比Rails(Sinatra/Ramaze/Camping)更轻的框架,但我担心通过这样做我将无法使用以插件形式为Rails定制的许多共享库.这是一个主要问题,还是大多数这些插件可用于不同的Ruby框架?
使用除Rails之外的Ruby框架还有其他潜在的缺点吗?
我写了一个Sinatra应用程序(网站),我想收集网站代码的代码覆盖率信息.我是Ruby的新手,但Google告诉我rcov是一个很好的代码覆盖工具.不幸的是,我在网上找到的所有信息都只显示了如何获取有关测试用例的代码覆盖率信息 - 我想要有关我的网站本身的代码覆盖率信息.
我要配置的特定站点文件位于"sdk"和"sdk/vendor"目录中,因此我通常使用"ruby site.rb"运行我的站点,而是尝试以下操作:
rcov -Isdk -Isdk/vendor site.rb
Run Code Online (Sandbox Code Playgroud)
它显示了Sinatra启动文本,但随后立即退出而不是像我的Sinatra应用程序那样等待Web请求.
有人能告诉我在启用代码覆盖的情况下运行我的网站的诀窍吗?我想运行该网站,用一系列请求点击它,然后停止该网站; 之后,我想查看整个系列请求中累积的代码覆盖率统计信息.
我目前正在使用Ruby 1.8.7.
我的表单通过POST接收数据.当我这样做时,puts params我可以看到:
{"id" => "123", "id2" => "456"}
Run Code Online (Sandbox Code Playgroud)
现在的命令:
puts params['id'] # => 123
puts params[:id] # => 123
params['id'] = '999'
puts params # => {"id" => "999", "id2" => "456"}
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时:
params[:id] = '888'
puts params
Run Code Online (Sandbox Code Playgroud)
我明白了
{"id" => "999", "id2" => "456", :id => "888"}
Run Code Online (Sandbox Code Playgroud)
在IRB中它工作正常:
params
# => {"id2"=>"2", "id"=>"1"}
params[:id]
# => nil
params['id']
# => "1"
Run Code Online (Sandbox Code Playgroud)
为什么我可以使用读取值:id,但不能使用它来设置值?
我知道Twitter Bootstrap是用Less编写的,但也有一堆Sass版本.我很难找到最好用的以及如何设置我的Sinatra项目.
我希望我的资产在生产环境中进行预编译和指纹识别,但是在开发过程中有未压缩的资产,因此我可以更容易地调试(比如Rails资产管道).我尝试设置bootstrap-sass,但它需要Compass.但是当我得到所有的twitter bootstrap mixins时,我真的不需要罗盘.我也遇到了配置问题.
无论如何,关于我应该做什么的明确答案会有所帮助.
试图用一种更简洁的方式在HAML和Ruby中表达这个条件,也许用三元运算符:
- if @page.nil?
%br (nothing yet)
- else
%br #{@page.name}
Run Code Online (Sandbox Code Playgroud)
(根据Neat方式寻找类似的方法来有条件地测试是否在HAML模板中添加类)
你的帮助将不胜感激:)
我正在处理oauth 1.0(twitter和flickr).网站在端口80工作,oauth服务器工作在端口8080
算法:
它使用sinatra + rack:session + rack :: session :: sequel + sqlite来存储会话.它发送Set-Cookie: rack.session=id每个响应
我正在使用两种类型的请求:带有jquery的crossdomain ajax和带有window.open的常规请求.我有一个很大的安全问题,传递cookie到跨域ajax请求.
无论服务器的响应头包含什么
访问控制允许标题:*
铬会引发安全错误:
拒绝设置不安全的标题"Cookie"
我想通过传递rack.session = id来发布数据并加载它来避免这个问题:
before "/twitter/connect.json" do
session = Rack::Session::something(params["rack.session"])
end
Run Code Online (Sandbox Code Playgroud)
但我不能在文档中找到如何做到这一点
我在Sinatra遇到了一个问题,我只能用json回复,而且我无法在任何地方找到好的sinatra文档,大多数事情似乎已经过时了.
无论如何,这是代码:
module MemcachedManager
class App < Sinatra::Base
register Sinatra::Contrib
helpers Sinatra::JSON
get '/' do
json({ hello: 'world' })
end
end
end
MemcachedManager::App.run! if __FILE__ == $0
Run Code Online (Sandbox Code Playgroud)
我得到的回应是:
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>{\"hello\":\"world\"}</p></body></html>\n"
Run Code Online (Sandbox Code Playgroud)
它应该只是json的一部分.当我没有要求它时,为什么它会渲染html标签?
我正在使用Sinatra构建API(为客户端使用Angular并希望其他人可以访问API)并使其成为OAuth提供者.我想知道最好的路线是什么(解决现有的宝石或从Warden或其他东西推出自己的解决方案).
在使用Rails之前,已经使用了设计和门卫进行身份验证和oauth,想知道什么是Sinatra的最佳解决方案.
理想情况下,我不希望视图或能够扩展/修改现有解决方案的操作,因为我只是作为API与它进行交互.
Sinatra文档说development?当环境开发时会返回true,但是我收到一个错误,指出该方法development?未定义.
我尝试跳过速记并测试ENV['RAKE_ENV']变量本身,但它只是零.
这是我得到的错误:
undefined method `development?' for main:Object (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
这是触发错误的代码:
require 'dm-sqlite-adapter' if development?
Run Code Online (Sandbox Code Playgroud)
我正在使用模块化风格的应用程序.上面的行是一个单独的文件,只管理模型.这是怎么回事?
现在我正在使用 Ruby 和 Mongo 开发一个应用程序。但是当我使用 gitlab-ci 部署应用程序时,我陷入了困境,似乎 mongo 服务器没有在 gitlab runner 的测试环境中启动。
这是我的 gitlab-ci.yml
stages :
- test
- deploy
services:
- mongo:latest
unitTest:API:
image: ruby:2.6.10
stage: test
cache:
paths:
- API/vendor/
before_script:
- ruby -v
- gem install bundler --no-ri --no-rdoc
- bundle install --gemfile=API/Gemfile --path vendor
script:
- RAILS_ENV=test rspec API/spec
- RAILS_ENV=test rubocop API
artifacts:
paths:
- coverage/
deploy_coba:
stage: deploy
before_script:
- cd API
script:
- gem install dpl
- dpl --provider=heroku --app=exhibisi-cobacoba --api-key=68b12c2b-cfbc-4478-b943-f26552fb907e
only:
- …Run Code Online (Sandbox Code Playgroud)