我正在为我妻子的手机构建一个iPhone应用程序,但我不想购买Mac作为一次性工作的开发平台.该应用程序:
这是我的想法:
要访问iPhone上的应用程序:
这似乎是一种奇怪的方法,但我想不出一种更简单的方法来编写一个独立的iPhone应用程序而无需购买Mac.有没有更好的方法呢?
我有一个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对象和字符串的其余部分,迭代地调用直到整个字符串被消耗.
我安装了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 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],你是哪种班级?然后我可以相应地对待每个参数.这有意义吗?
我想从Sinatra应用程序发送二进制数据,以便用户可以将其作为文件下载.
我试过用send_data但它给了我一个undefined method 'send_data'
我怎么能实现这个目标?
我可以将数据写入文件然后使用,send_file但我宁愿避免这样做.
我正在使用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应用程序中的任何内容都没有尝试要求它或者设置它.
说我有:
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) 我有一个网络应用程序,让我们说http://web.example.com向http://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的帮助或示例都将不胜感激.
我安装了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) 我无法按照需要在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计划窒息?
sinatra ×10
ruby ×3
rack ×2
attributes ×1
cors ×1
iphone ×1
javascript ×1
params ×1
passenger ×1
postgresql ×1
puma ×1
routes ×1