【问题标题】:How do I use CGI in a Heroku application written with Ruby and Sinatra?如何在使用 Ruby 和 Sinatra 编写的 Heroku 应用程序中使用 CGI?
【发布时间】:2012-10-31 15:21:27
【问题描述】:

我正在尝试使用 CGI 将信息从文本表单移动到新网页。为此,我在表单中将action 设置为action="new.html"。然后,在我的.rb 文件的相关部分,我有:

get "/new.html" do
  @graph  = Koala::Facebook::API.new(session[:access_token])
  @app  =  @graph.get_object(ENV["FACEBOOK_APP_ID"])

  if session[:access_token]
    @query=CGI.new()         # Line of interest
    @input=@query["tool_1"]  # Line of interest
  end

  erb :my_tools_F
end

post "/new.html" do
  redirect "/new.html"
end

新网页加载,但当我在 .erb 文件中调用它时,@input 是空白的。在这部分脚本之前,我确实需要 CGI。我的虚拟主机是 Heroku,两个 .erb 文件都在一个名为 views 的目录中。该应用程序旨在在 Facebook 上启动。

示例代码为here

【问题讨论】:

  • 我更新了我的答案。看看对你有没有帮助。

标签: ruby heroku cgi sinatra


【解决方案1】:

您似乎正在尝试获取表单的参数。我在这里有另一个答案,但这对你不起作用。你可以在没有 cgi 的情况下轻松地做到这一点,你应该考虑使用内置的方法来做到这一点。但是,在您这样做之前,我注意到您的 github 帖子中有一些错误。

您的文件夹Views 应为views。小但很重要。我无法正确渲染页面。

在第 33 行的 new.erbindex.erb 上显示:

<input type="submit" value="Add"">

最后多了一个"。只需将其删除即可:

<input type="submit" value="Add">

最后,做你需要做的:

get "/new.html" do
  erb :new
end

post "/new.html" do
  @input = params[:tool_1]
  erb :new
end

而不是你所做的。在http://www.sinatrarb.com/intro 上查找参数。

【讨论】:

  • 感谢您的尝试,但是我使用这个时“@input”仍然是空的。
  • 我很乐意帮助您调试它。您可以编写一个退化版本的代码,在没有 facebook 身份验证的情况下复制错误吗?将其发布在 gist、github 或其他任何地方。
  • 我会的,但如果我没有遇到任何障碍,新版本要到明天晚些时候才能发布。
  • 这个应用的部分代码现在可以在“github.com/runninggraeb/Toolshed”找到,你可以在“immense-garden-8474.herokuapp.com”看到这个应用。
  • 对于遇到此问题的其他人,net.tutsplus.com/tutorials/ruby/singing-with-sinatra 有一个很棒的 Sinatra 教程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多