我有一个sinatra服务foo.rb
要运行它,我在不同的端口上输入"ruby foo.rb -p 5000".
当程序运行时,我希望能够获得端口(在这种情况下为5000)和其他信息.有没有办法在应用程序运行时获取这样的信息?
谢谢
我无法确定为什么我在这里收到名称错误.我是DataMapper的新手,但尝试关联.任何帮助表示赞赏.
用户:
class User
include DataMapper::Resource
property :id, Serial, :key => true
property :first_name, String
property :last_name, String
property :company, String
property :city, String
property :country, String
property :mobile_number, Integer
property :email_address, String
property :shahash, String
property :isRegistered, Boolean
belongs_to :event, :required => true
end
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud)
事件:
class Event
include DataMapper::Resource
property :id, Serial, :key => true
property :name, String
property :occuring, DateTime
has n, :user
end
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud) 运行ruby 1.9.2p290和最新版本的Sinatra.
当我尝试运行我的Sinatra应用程序时
ruby application.rb
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
C:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
Run Code Online (Sandbox Code Playgroud)
我检查了Rake"已初始化常量WFKV_"警告并尝试修复但没有成功.http:// localhost:4567 /也没有产生任何结果.
我正在构建一个新的REST API,它将取代现有的REST API.较旧的API被编写为使用Java构建的SOAP API,这就是问题所在.大多数数据访问层库都是用Java编写的,如果我们可以使用这些库将是一个很好的资产.
到目前为止,我们的两个选项是:Ruby/Sinatra和Scala/Lift
我们还可以在Ruby/Sinatra堆栈上使用JRuby,以便使用我之前提到的Java库.我们主要担心的是可能的JRuby-Java库不兼容......
您认为最好的方法是什么?
我目前在Heroku的Cedar堆栈上运行Octopress(基于Jekyll)站点 - 代码存在于此:https://github.com/elithrar/octopress
我想Cache-Control根据文件类型有选择地应用标头:
.html files的值为 public, max-age=3600.css|.js|.png|.ico(等)获取值public, max-age=604800- 或者,我想将此规则应用于从/stylesheets', '/javascripts', '/imgs'目录提供的任何内容.既没有运气又使用set :static_cache_control , [:public, :max_age => 3600]了香草语cache_control :public, :max_age => 3600.
我已设法自己设置public, max-age=3600文章(例如/2012/lazy-sundays/),但无法将标题应用于CSS/JS(例如/stylesheets/screen.css)
我config.ru目前看起来像这样(更新):
require 'bundler/setup'
require 'sinatra/base'
# The project root directory
$root = ::File.dirname(__FILE__)
class SinatraStaticServer < Sinatra::Base
get(/.+/) do
cache_control :public, :max_age => 7200
send_sinatra_file(request.path) {404}
end
not_found do
send_sinatra_file('404.html') …Run Code Online (Sandbox Code Playgroud) 我有一个使用Sequel和Postgres的Sinatra应用程序......这是一个非常简单的模块,可以插入到数据库中.我想从插入中捕获任何错误并返回有用的消息.
我的代码如下:
begin
sql = DB["INSERT INTO table (id, firstname, lastname, ...) values (......)"]
ds.insert
rescue Sequel::Error
...
end
Run Code Online (Sandbox Code Playgroud)
如何捕获实际错误?我可以把"有一个错误"打印出来,但我想要更具体的东西 - 比如"名字是必需的","姓氏是必需的".
有人可以帮忙吗?
我在Sinatra应用程序中使用Rufus调度程序.我可以从"scheduler do"块中访问辅助方法吗?我没有设法做到这一点(我得到一个"未定义的方法`检查'为main:Object"错误)所以现在我必须在helpers块中定义方法(在"post"/"do"块中使用它也)然后将方法的主体复制到调度程序块.它没有意义:(有没有办法避免重复?我可以在其他地方定义一个方法并在调度程序中调用它吗?
我正在使用Sinatra路由,如果可能的话,我想解释一个普通的HTTP地址作为路由中的参数:
url http://somesite/blog/archives
Run Code Online (Sandbox Code Playgroud)
路线是:
/http://somesite/blog/archives
Run Code Online (Sandbox Code Playgroud)
代码是:
get '/:url' do |u|
(some code dealing with url)
Run Code Online (Sandbox Code Playgroud)
HTTP URL中的各种"/"正在产生问题.
我找到的解决方法是仅传递上面示例中"somesite"所代表的URL部分,然后使用:
get '/:url' do |u|
buildUrl = "http://#{u}/blog/archives"
(some code dealing with url)
Run Code Online (Sandbox Code Playgroud)
有没有办法直接处理完整的URL?
所以我有一个在服务器上运行的ruby sinatra程序,我有一个Gem文件,以确保安装所有的依赖项.然而,它调用一个python脚本,它有自己的python模块依赖项.因此,当它部署到服务器时,所有红宝石宝石的依赖性都很好但不是它们的python依赖性.
有一个python等效的Gem文件?或者有没有办法通过Gem文件安装python模块?
我已经向我建议过buildr,但这似乎是基于java的程序.
任何帮助将非常感激.
这是我与Sinatra的第一次尝试.我构建了一个简单的经典应用程序,为它设置RSpec,并让它工作.然后,我尝试以MVC方式进行模块化.即使应用程序在浏览器中工作,RSpec也会抛出一个NoMethodError.我已经阅读过关于RSpec的Sinatra文档,在SO中也搜索了很多,但我找不到bug的位置.任何线索?
非常感谢你提前.
这是我的相关文件:
config.ru
require 'sinatra/base'
Dir.glob('./{app/controllers}/*.rb') { |file| require file }
map('/') { run ApplicationController }
Run Code Online (Sandbox Code Playgroud)
app.rb
require 'sinatra/base'
class ZerifApp < Sinatra::Base
# Only start the server if this file has been
# executed directly
run! if __FILE__ == $0
end
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ application_controller.rb
class ApplicationController < Sinatra::Base
set :views, File.expand_path('../../views', __FILE__)
set :public_dir, File.expand_path('../../../public', __FILE__)
get '/' do
erb :index
end
end
Run Code Online (Sandbox Code Playgroud)
投机/ spec_helper.rb
require 'rack/test'
# Also tried this
# Rack::Builder.parse_file(File.expand_path('../../config.ru', __FILE__))
require File.expand_path '../../app.rb', …Run Code Online (Sandbox Code Playgroud)