- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试为我的 Rack 应用程序创建一个子域路由器,但我遇到了一个问题。这是我的 config.ru 代码:
require './controllers/subdomain'
require './controllers/www'
set :root, './'
run Example::Subdomain.new({
:www => Sinatra::Application
})
这是我的 subdomain.rb 代码:
module Example
class Subdomain
def initialize(map = {})
@map = map
end
def call(env)
@map.each do |subdomain, app|
if env['HTTP_HOST'].split('.').first.eql?(subdomain)
app.call(env)
end
end
end
end
end
当我运行它时,出现以下错误:
NoMethodError: undefined method `to_i' for {:www=>Sinatra::Application}:Hash
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/lint.rb:555:in `check_status'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/lint.rb:19:in `call'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/lint.rb:19:in `assert'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/lint.rb:555:in `check_status'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/lint.rb:51:in `_call'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/lint.rb:37:in `call'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/showexceptions.rb:24:in `call'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/commonlogger.rb:33:in `call_without_check'
/Library/Ruby/Gems/1.8/gems/sinatra-1.3.6/lib/sinatra/base.rb:161:in `call'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/chunked.rb:43:in `call'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/connection.rb:81:in `pre_process'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/connection.rb:79:in `catch'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/connection.rb:79:in `pre_process'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/connection.rb:54:in `process'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/connection.rb:39:in `receive_data'
/Library/Ruby/Gems/1.8/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run_machine'
/Library/Ruby/Gems/1.8/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/backends/base.rb:63:in `start'
/Library/Ruby/Gems/1.8/gems/thin-1.5.0/lib/thin/server.rb:159:in `start'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/handler/thin.rb:16:in `run'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/server.rb:264:in `start'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/lib/rack/server.rb:141:in `start'
/Library/Ruby/Gems/1.8/gems/rack-1.5.2/bin/rackup:4
/usr/bin/rackup:19:in `load'
/usr/bin/rackup:19
-e:1:in `load'
-e:1
有没有人知道为什么会发生这种情况而不是运行 app.call(env)
?
这是错误的截图: http://i46.tinypic.com/3538is6.jpg
此代码也有效,但它不遵守子域规则:
module Example
class Subdomain
def initialize(map = {})
@map = map
end
def call(env)
@map.each do |subdomain, app|
return app.call(env)
end
end
end
end
最佳答案
Rack 认为您正在为响应的三元组中的状态代码返回 @map
,即 [status, headers, body]
(如 here 所示) ).这是因为 each
在其迭代结束时返回集合,并且它被用作您的 call
的返回值。
也许这对您有用,或者至少让您入门:
def call(env)
subdomain = env['HTTP_HOST'].split('.').first
app = @map[subdomain]
app.call(env)
end
关于ruby - 哈希的未定义方法 `to_i',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15582080/
我觉得如果 "".to_i 和 "".to_f 为 nil 或引发异常会很自然,而且确实如此定义 nil.to_i 或 nil.to_f 对我来说意义不大。 nil.to_i #=> 0, "".to
我正在尝试为我的 Rack 应用程序创建一个子域路由器,但我遇到了一个问题。这是我的 config.ru 代码: require './controllers/subdomain' require '
我需要在 Javascript 中重现以下 Ruby 代码,但我找不到 to_i 的等效代码。 beginning_of_last_full_hour = (Time.now.to_s.split(/
对于一项作业,我需要编写一个名为 get_integer_from_string 的方法,它将输入字符串转换为整数。我已经完成了,但有一个要求: 请不要使用隐式或自动类型转换来解决这个问题问题,即 C
在类上定义 to_s 的效果与我预期的一样: class Foo def to_s "Joe" end end f = Foo.new "hello #{f}" # => "hello
我第一次尝试设计。我创建了一个基本的登录/注销系统,并试图从控制台创建一些对象并注意到一些奇怪的事情: rails c --sandbox Loading development environmen
我的 Controller 中有以下代码: @raw_data = ["124324/12", "345346/15"] @data_set = [] @raw_data.each do |data|
to_i String#method 的基本参数实际上是做什么的? 一些例子: "2".to_i(2) == 0 "2".to_i(36) == 2 "2".to_i(4) == 2 "ff".to_
Ruby 允许使用 Integer.to_s(base) 和 String.to_i(base) 在基数之间进行转换。 我希望使用 Integer.to_i(base) 将二进制整数转换为十进制整数,
我正在运行这条线: 并且输出是一个 fixnum 而不是一个 int。这是为什么? 来自 Controller : @date = Lesson.find(:all, :order => 'crea
我需要转换一些字符串,并取出前两个整数,例如: unkowntext60moreunknowntext25something 收件人: @width = 60 @height = 25 如果我执行 s
我从文件中读取了一个数字 "98",并尝试使用 input.to_i(2) 将其转换为二进制,但我得到了 0 这样。 input=File.read("input.dat") puts "Input
我对这行 ruby 代码感到困惑。为什么赋值给 x, y 而不是单个变量? x,y = gets.split.map &:to_i 最佳答案 这会将数组的第一个条目分配给 x,将第二个条目分配给
知道如何获得与在 PHP 中使用 Ruby 相同的结果吗? Unix 纪元时间。 timeint = Time.now.to_i puts timeint 结果: 1443253948 我尝试了 ht
我正在执行 Chris Pine 的“学习编程”中的任务。该程序询问一个人最喜欢的号码,加上 +1,然后显示结果。我写了这个: puts 'Hello, what\' your favorite nu
我得出的结论是 ActiveRecord 会根据其参数自动调用 to_i,但如果有人可以确认,尤其是通过对某些文档的引用,我将不胜感激。 下面的代码示例最好地说明了我得出结论的方式: dest_tas
我正在尝试将参数中传递的邮政编码保存为 "07306" 和 "03452",但是 to_i 似乎在验证之前将这些字符串值转换为 7306 和 3452,因此验证一直失败。 如何防止 Ruby 删除前导
我看到人们使用以下代码: gets.chomp.to_i 或 gets.chomp.to_f 我不明白为什么,当这些行的结果总是与 gets 之后没有 chomp 时的结果相同。 gets.chomp
给定一个像这样的字符串对象: twohundred = "200" 做和做有什么区别: Integer(twohundred) #=> 200 和: twohundred.to_i #=>
Time.now.to_i 有不同的输出: 本地:1416844833 生产(heroku):1416848333 我认为它忽略了时区,我也尝试了 Time.now.utc.to_i 并且正如预期的那
我是一名优秀的程序员,十分优秀!