我正试图让我的第一个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) 好的,所以我说这个没有问题,但是我想确保我做得对,因为从长远来看,这似乎是一项额外的工作.
我正在与Sinatra合作并使用HAML模板.我想在我的HAML文件中包含一个JavaScript文件.我的目录结构如下所示:
当我尝试包含文件(没有额外的路由或任何东西)时,我得到一个页面无法找到错误.但是,如果我添加此代码,那么它工作正常:
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) 我已经看到很多将#放在链接的href属性中的示例,以便让浏览器触发onclick事件.我最近在Ruby Sinatra应用程序中自己做了这个.我现在注意到的是当我从服务器端代码内部重定向到'/'时(通过303响应),浏览器中的URL仍然具有#的结尾.
这是没有表单元素的帖子的"正确"方法吗?
<a href='#' onclick="$.post('/test1/69')">add</a>
Run Code Online (Sandbox Code Playgroud) 我在一个视图上有一些复选框,我想在另一个视图上评估,但我不明白它在做什么.
我已经阅读了帖子/博客,说明了不同的方法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) 我已经通过经典的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) 在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)
谢谢!
我想将模板文件放在不同的目录中.(foo /,bar /)
你怎么用Sinatra写的?
图片http://gyazo.com/618527622953071ace074f5d15190437.png?1340192301
这种方式出错了.
我的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) 我正在构建一个像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?
我觉得这很奇怪,这很正常:
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)