标签: sinatra

开发没有Mac的iPhone应用程序?

可能重复:
如何使用Windows开发机器为iPhone开发?

我正在为我妻子的手机构建一个iPhone应用程序,但我不想购买Mac作为一次性工作的开发平台.该应用程序:

  • 应该在iPhone上独立运行(即没有网络连接)
  • 使用其中一个iPhone Javascript库创建的GUI是完全可以接受的
  • 将执行一些数据库IO来读取和更新数据
  • 没有商业价值,任何人都不会使用

这是我的想法:

  • 越狱iPhone
  • 在iPhone上安装Ruby + Sinatra
  • 使用Sinatra编写应用程序,在iPhone上访问数据库(SQLite?)

要访问iPhone上的应用程序:

  • 在后台启动Sinatra应用程序(这可能吗?)
  • 启动Safari浏览器会话
  • 导航到Sinatra应用程序,例如http:// localhost:12345
  • 等等

这似乎是一种奇怪的方法,但我想不出一种更简单的方法来编写一个独立的iPhone应用程序而无需购买Mac.有没有更好的方法呢?

ruby iphone sinatra

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

发送/解析多个JSON对象

我有一个Sinatra服务器以流方式从数据库返回多个JSON对象.对象看起来像:

{"a": 1, "b": 2, "c": 3}
{"a": 4, "b": 5, "c": 6}
...
Run Code Online (Sandbox Code Playgroud)

但这是无效的JSON.我可以在Sinatra的事件处理中添加一个hack(手动注入缺少的数组分隔符),使响应看起来像:

[
{"a": 1, "b": 2, "c": 3}
, {"a": 4, "b": 5, "c": 6}
]
Run Code Online (Sandbox Code Playgroud)

现在这是有效的JSON,但这种技术不够优雅.有没有办法做这个客户端?基本上,我想要的是让一个JavaScript函数读取一个字符串并使用一个有效的JSON对象,然后返回给我JSON对象和字符串的其余部分,迭代地调用直到整个字符串被消耗.

javascript sinatra

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

在80端口运行Sinatra

我安装了Sinatra并且它可以工作,但它默认使用端口4567.我希望它在端口80上运行.

为了让它在端口80上工作,我尝试了这个:

require 'rubygems'
require 'rack/handler/webrick'
require 'sinatra'

Sinatra::Application.default_options.merge!(
  :run => false,
  :env => :production,
  :port => 80
)

get '/' do
  "Hello World"
end
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

$ ruby -rubygems index.rb
index.rb:5:in `<main>': undefined method `default_options' for Sinatra::Application:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?

ruby sinatra

16
推荐指数
2
解决办法
3万
查看次数

如何在帖子中获得params属性?

我正在使用带有Ruby 1.8.7的Sinatra.我是网络开发的新手,所以我并不完全理解获取和发布,但我得到了一些工作.接下来我需要知道的是如何在帖子中查询某些属性的params.在我的主文件中,我有这个代码:

get "/plan_design" do
  erb :plan_design
end

post "/plan_design" do
  # do stuff with params
end
Run Code Online (Sandbox Code Playgroud)

在plan_design.erb中,我有:

<% if (hash[paramTitle].kind_of?(String)) %>
  <div> <input class="planDesignAsset" name="<%= paramTitle  %>"  value="<%= hash[paramTitle] %>" ></input> </div> 
<% else %>  
  <div> <input class="planDesignAssetNum" name="<%= paramTitle  %>"   value="<%= hash[paramTitle] %>" ></input> </div> 
<% end %>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在为非字符串使用不同的类.在post,我需要问一下params[some_key],你是哪种班级?然后我可以相应地对待每个参数.这有意义吗?

attributes params sinatra

16
推荐指数
1
解决办法
3万
查看次数

如何从Sinatra发送二进制数据?

我想从Sinatra应用程序发送二进制数据,以便用户可以将其作为文件下载.

我试过用send_data但它给了我一个undefined method 'send_data'

我怎么能实现这个目标?

我可以将数据写入文件然后使用,send_file但我宁愿避免这样做.

sinatra

16
推荐指数
3
解决办法
8320
查看次数

Sinatra和机架保护设置

我正在使用Sinatra和CORS接受域A(hefty.burger.com)上的文件上传.域B(fizzbuzz.com)有一个表单,可以将文件上传到A上的路由.

我有一个选项路线和一个后期路线,都命名为'/ uploader'.

options '/uploader' do
  headers 'Access-Control-Allow-Origin' => 'http://fizz.buzz.com',
  'Access-Control-Allow-Methods' => 'POST'
  200
end 

post '/uploader' do
  ... 
  content_type :json
  [{:mary => 'little lamb'}].to_json
end
Run Code Online (Sandbox Code Playgroud)

这些选项首先被击中......然后它会起作用..然后帖子被击中并返回403.

如果我禁用保护,帖子工作......我需要从列表中排除什么样的保护以保持保护但允许这些帖子通过?

我最近才被新的机架防护装置狠狠地踩到了Heroku并让我感到悲伤......任何人都有一个很好的指针,可以在这里做什么?我这么说的原因是,我突然看到日志条目带有会话劫持问题的警报(几乎可以肯定是因为只为应用程序运行> 1 Dyno).我在我的Gemfile.lock中看到了机架保护(1.2.0),即使我从未要求它...我的清单中的某些内容正在调用它,因此它已加载,但我的Sinatra应用程序中的任何内容都没有尝试要求它或者设置它.

rack sinatra http-status-code-403

16
推荐指数
3
解决办法
1万
查看次数

如何获取Sinatra应用程序中使用的所有路由的列表?

说我有:

require 'sinatra'

get '/' { "hi" }
get '/a' { "a" }
get '/b' { "b" }
Run Code Online (Sandbox Code Playgroud)

在我的Sinatra应用程序中是否有任何简单方法获取所有已定义路径的列表?

我调查过Sinatra::Base.routes,但似乎并没有包含我刚刚定义的路线.

我希望有一个很好的方法来制作一个自我记录API,routes.each { |r| p r }以获得:

/
/a
/b
Run Code Online (Sandbox Code Playgroud)

routes sinatra

16
推荐指数
1
解决办法
7912
查看次数

如何使用机架/保护在Sinatra中指定原始白名单选项

我有一个网络应用程序,让我们说http://web.example.comhttp://api.example.com发出POST请求.api服务器正在运行最新版本的Sinatra,并启用了机架保护.我收到这个错误'Rack :: Protection :: HttpOrigin'阻止了攻击.

我可以这样做:

set :protection, :except => [:http_origin]
Run Code Online (Sandbox Code Playgroud)

但我觉得我只是忽略了实际的问题.

我试过这样做:

use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']
Run Code Online (Sandbox Code Playgroud)

但我仍然得到警告.

该请求不会被拒绝,但Sinatra清除我的会话看到这篇文章,我需要session_id.

任何有关如何为HttpOrigin类指定option_whitelist的帮助或示例都将不胜感激.

rack sinatra cors

16
推荐指数
1
解决办法
5046
查看次数

乘客:内部服务器错误

我安装了Apache,Passenger和Sinatra并部署了一个应用程序.尝试访问时出错:

An error occurred while starting up the preloader: it did not write a startup response in time.

Application root
    /var/www/html/test
Environment (value of RAILS_ENV, RACK_ENV, WSGI_ENV and PASSENGER_ENV)
    production
Ruby interpreter command

    /usr/local/bin/ruby

User and groups

    Unknown

Environment variables

    Unknown

Ulimits

    Unknown
Run Code Online (Sandbox Code Playgroud)

我该如何解决?


编辑

在应用程序日志中,我发现了以下错误:

!> Ready
!> socket: unix:/tmp/passenger.1.0.14019/generation-0/backends/preloader.14049
!>
Run Code Online (Sandbox Code Playgroud)

宝石清单:

bigdecimal (1.2.0)
builder (3.2.0)
bundler (1.3.1)
daemon_controller (1.1.1)
fastthread (1.0.7)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
passenger (4.0.0.rc4)
psych (2.0.0)
rack (1.5.2)
rack-protection (1.4.0)
rake (0.9.6)
rdoc …
Run Code Online (Sandbox Code Playgroud)

ruby passenger sinatra

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

ActiveRecord :: ConnectionNotEstablished - 没有X的连接池

我无法按照需要在heroku上托管我的sinatra/ruby​​应用程序.我摆弄了一些试图解决这个问题的设置,但到目前为止还没有结果.

ActiveRecord::ConnectionNotEstablished - No connection pool for User:
2015-06-25T14:26:11.736854+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:566:in `retrieve_connection'
2015-06-25T14:26:11.736856+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
2015-06-25T14:26:11.736858+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_handling.rb:87:in `connection'
Run Code Online (Sandbox Code Playgroud)

用户是我的ActiveRecords表之一,应用程序失败,因为我尝试查询它.

我使用sinatra与puma备份.这是我的Procfile:

web: ruby app/my-server.rb -s puma
Run Code Online (Sandbox Code Playgroud)

我还在检查有多少打开的连接使用:

select count(*) from pg_stat_activity where pid <> pg_backend_pid()  and usename = current_user; 
Run Code Online (Sandbox Code Playgroud)

但它每次都说0.

我正在主持应用程序的免费计划和开发计划的herokupostgres.

我还注意到,在短时间内有2次快速调用api时会出现问题.就像只有1个,而不是5个连接可用,因为第一次呼叫成功,第二次呼叫失败.在我的database.yml中,我将池设置为5.

我在Rails 4.2.1和Postgres 9.4上

这是我的database.yml以及:

default: &default
  adapter: postgresql
  encoding: utf8
  pool: 5
  timeout: 5000

production:
  <<: *default
  host: my_db_address
  port: 5432
  database: my_db_name
  username: my_db_user_name
  password: my_db_password

< test and development ommited >
Run Code Online (Sandbox Code Playgroud)

我是否会错过一些配置或免费的heroku计划窒息?

postgresql ruby-on-rails sinatra puma rails-activerecord

16
推荐指数
1
解决办法
8593
查看次数