标签: sinatra

我哪里错了?"Sinatra的未定义方法'应用程序':模块"Sinatra/Passenger/Apache

我正试图让我的第一个Sinatra应用程序开始,但我从Passenger获得了一个错误页面:

undefined method `application' for Sinatra:Module
Run Code Online (Sandbox Code Playgroud)

这是我的Rackup文件:

require 'rubygems'
require 'sinatra'
set :env,  :production
disable :run
require 'app'
run Sinatra.application
Run Code Online (Sandbox Code Playgroud)

和应用程序本身:

#!/usr/bin/env ruby

require 'rubygems'
require 'sinatra'
require 'haml'

get '/' do
  haml :index
end

get '/hello/:name' do |name|
  @name = name
  haml :hello
end

get '/goodbye/:name' do |name|
  haml :goodbye, :locals => {:name => name}
end

__END__

@@layout
%html
  %head
    %title hello.dev
  %body
    =yield

@@index
#header
  %h1 hello.dev
#content
  %p
    This is a test...

@@hello
%h1= "Hello #{@name}!"

@@goodbye …
Run Code Online (Sandbox Code Playgroud)

ruby apache passenger sinatra

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

没有帮助,Sinatra无法提供JavaScript文件?它是否正确?

好的,所以我说这个没有问题,但是我想确保我做得对,因为从长远来看,这似乎是一项额外的工作.

我正在与Sinatra合作并使用HAML模板.我想在我的HAML文件中包含一个JavaScript文件.我的目录结构如下所示:

  • 媒体/
    • JS /
      • init.js (我要包含的文件)
    • CSS /
  • 楷模/
  • 意见/
    • layout.haml
  • 路线/
  • init.rb
  • bootstrap.rb (包含在init.rb中)

当我尝试包含文件(没有额外的路由或任何东西)时,我得到一个页面无法找到错误.但是,如果我添加此代码,那么它工作正常:

get '/media/js/:name' do
    begin
        send_file('media/js/' + params[:name])
    rescue
       "There's nothing for you here"
    end
end
Run Code Online (Sandbox Code Playgroud)

我这样做是为了提供我的媒体/静态文件没有问题,但我只是想确保这是必要的,我想避免这是可能的.

编辑

我将以下代码包含在我的bootstrap.rb文件中,但无济于事:

set :root, File.dirname(__FILE__)
enable :static
Run Code Online (Sandbox Code Playgroud)

ruby model-view-controller sinatra

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

将#in href用于从onclick事件执行HTTP POST的"正确"方式?

我已经看到很多将#放在链接的href属性中的示例,以便让浏览器触发onclick事件.我最近在Ruby Sinatra应用程序中自己做了这个.我现在注意到的是当我从服务器端代码内部重定向到'/'时(通过303响应),浏览器中的URL仍然具有#的结尾.

这是没有表单元素的帖子的"正确"方法吗?

<a href='#' onclick="$.post('/test1/69')">add</a> 
Run Code Online (Sandbox Code Playgroud)

html ruby jquery http sinatra

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

获取复选框的值[Ruby/Sinatra(Rails)]

我在一个视图上有一些复选框,我想在另一个视图上评估,但我不明白它在做什么.

我已经阅读了帖子/博客,说明了不同的方法name: -

update_params[]                     # array
update_params[0], update_params[1]  # known indexed array
update_params0, update_params1      # differently named
Run Code Online (Sandbox Code Playgroud)

所以第一个似乎是最常见的: -

# views/index.erb
<input type="checkbox" name="update_params[]" value="Copy" />Update the host<br/>
<input type="checkbox" name="update_params[]" value="Start" />Start the software<br/>
Run Code Online (Sandbox Code Playgroud)

应该value编入索引吗?0,1

所以我想要两个结果

1)显示从version.erb视图上的index.erb视图中选择的选项.

所以它看起来像: -

Copy : Yes
Start : No
Run Code Online (Sandbox Code Playgroud)

目前我有: -

# views/version.erb
<p>Copy : <%= params['update_params[0]'] %></p>
<p>Start : <%= params['update_params[1]'] %></p>
Run Code Online (Sandbox Code Playgroud)

2)EVAL选项,来传递给脚本,使得它们成为命令行选项,即-c,-l

所以我的"控制器"

# update.rb
helpers do
  def run_update(version, host, …
Run Code Online (Sandbox Code Playgroud)

ruby forms ruby-on-rails sinatra

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

转换为模块化sinatra应用程序中断测试

我已经通过经典的sinatra应用程序进行模块化,并根据/sf/answers/352112141/将我的sinatra应用程序中的路线移动到单独的路径文件中,但是,我似乎无法让我的测试工作.

这就是我的文件的样子:

./web.rb

require 'sinatra'
require 'sinatra/flash'

class MyApp < Sinatra::Application
  # ...
end

require_relative 'models/init'
require_relative 'helpers/init'
require_relative 'routes/init'
Run Code Online (Sandbox Code Playgroud)

./routes/init.rb

require_relative 'main'
Run Code Online (Sandbox Code Playgroud)

./routes/main.rb

# The main routes for the core of the app
class MyApp < Sinatra::Application
  get '/' do
    erb :main
  end
end
Run Code Online (Sandbox Code Playgroud)

./spec/spec_helper.rb

ENV['RACK_ENV'] = 'test'
require 'minitest/autorun'
require 'rack/test'
require 'factory_girl'

# Include factories.rb file
begin
  require_relative '../test/factories.rb'
rescue NameError 
  require File.expand_path('../test/factories.rb', __FILE__)
end

# Include web.rb file
begin
  require_relative '../web'
rescue NameError 
  require …
Run Code Online (Sandbox Code Playgroud)

testing sinatra minitest

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

如何在ruby Sinatra中使用strftime本地化日期名称

在ruby(sinatra应用程序)中本地化strftime以在法语中使用日期名称的最佳方法是什么?

我有 :

"2012-06-04".strftime("%a") # => "Mon"
Run Code Online (Sandbox Code Playgroud)

我想要 :

"2012-06-04".strftime("%a") # => "Lun"
Run Code Online (Sandbox Code Playgroud)

谢谢!

ruby localization strftime sinatra

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

如何使用Sinatra从不同目录渲染模板和布局

我想将模板文件放在不同的目录中.(foo /,bar /)

你怎么用Sinatra写的?

图片http://gyazo.com/618527622953071ace074f5d15190437.png?1340192301

这种方式出错了.

ruby haml sinatra

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

HAML layout.haml和Sinatra不使用url参数

我的index.haml正常工作,例如:

get '/about' do
  haml :about
end
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用如下的用户参数:

get ':user/add' do
  haml :add_item
end
Run Code Online (Sandbox Code Playgroud)

layout.haml被忽略.

我试图使用我的视图文件夹中的子目录来使其工作,如:

/view/contact/add.haml

虽然它插入= yield内容,但它不会显示layout.haml css样式等.

所以我认为使用子目录是问题,并将我的所有hamls放在基本视图目录中.但是,似乎任何使用url参数(如get':user/add')都不会包含layout.haml.目前这是我做的测试:

myapp.rb

require "rubygems"
require "sinatra"
require "haml"
require "data_mapper"
require "pony"

get '/' do #works fine
  haml :index
end

get '/:user_id/dashboard' do #recognizes the content but ignores layout.haml                                                                        
  haml :dashboard                                                                                        
end
Run Code Online (Sandbox Code Playgroud)

我的layout.haml看起来像这样:

意见/ layout.haml

!!!
%html
  %head
    %title Testing haml and sinatra
    %link(rel="stylesheet" href="css/style.css")  
  %body
    #wrapper
      #header
        %h1 HAML Test Template
        %h2 Made with Sinatra and HAML! …
Run Code Online (Sandbox Code Playgroud)

ruby haml sinatra

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

在模块化Sinatra应用程序中访问irb

我正在构建一个像Sinatra一样子类的应用程序:

require 'rubygems'
require 'sinatra/base'
require 'sinatra/assetpack'

class App < Sinatra::Base
  ...

  run!
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能访问irb?以这种方式执行sinatra时不解析选项,如何以编程方式打开irb shell?

ruby irb sinatra

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

在Sinatra中,如何呈现json?

我觉得这很奇怪,这很正常:

  get '/initialize' do
    # ok 
    json foo: 'bar'
  end 
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

  get '/initialize' do
    json { foo: 'bar' }   # error! 
  end 
Run Code Online (Sandbox Code Playgroud)

语法错误,意外的':',期望'}'(SyntaxError)

为什么?

我怎么写这样的代码:

  get '/initialize' do
    json { 
         item1: { 
             item2: {
                 item3: 'ok'
             }
         } 
    }

  end 
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

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