这只是我周末的项目/研究,我是Sinatra和MongoDB的新手.
我已经为mongoDB安装了宝石,例如:mongo,mongo_mapper和mongoid.
当我尝试从localhost连接到MongoHQ上的数据库时,遇到了这样的错误:
Mongo::ConnectionFailure at /
failed to connect to any given host:port
* file: connection.rb
* location: connect
* line: 489
Run Code Online (Sandbox Code Playgroud)
我在SO上找到了类似的帖子,但坦率地说,我不太明白答案......
这是我的代码片段:
require 'rubygems'
require 'sinatra'
require 'mongo'
require 'mongo_mapper'
get '/' do
MongoMapper.connection = Mongo::Connection.new('flame.mongohq.com', 27044)
MongoMapper.database = 'notes'
MongoMapper.database.authenticate('foo', 'bar')
erb :list
end
Run Code Online (Sandbox Code Playgroud)
我从这里拿了上面的代码,但似乎没有用......
哪部分错了?还有另一种方法吗?最后,这个测试Web应用程序将部署到heroku上,所以我希望该解决方案可以同时使用localhost和我的heroku服务器.
更新:
I just created a minimal code snippet to test the mongodb connection:
require 'rubygems'
require 'mongo'
db = Mongo::Connection.new("flame.mongohq.com", 27044).db("notes")
Run Code Online (Sandbox Code Playgroud)
但是在超时后仍然出现错误:
$ ruby mongodbtest.rb …Run Code Online (Sandbox Code Playgroud) 问题是mongoids save!动作引发的以下错误.
Mongoid::Errors::Validations: Validation failed - Img failed to be processed.
~/.rvm/gems/ruby-1.8.7-p249/gems/mongoid-2.0.0.rc.7/lib/mongoid/persistence.rb:234:in `fail_validate!'
~/.rvm/gems/ruby-1.8.7-p249/gems/mongoid-2.0.0.rc.7/lib/mongoid/persistence.rb:75:in `save!'
./app.rb:29:in `POST /upload'
Run Code Online (Sandbox Code Playgroud)
设置主要是以下内容:
require "sinatra" # 1.1.2
require "mongoid" # 2.0.0.beta.19
require "rmagick" # 2.12.2
require "carrierwave" # 0.5.1
require "carrierwave/orm/mongoid"
require 'carrierwave/processing/rmagick'
....
Mongoid.database = Mongo::Connection.new('somehost', 1234).db('test')
class Uploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :file
def store_dir
"uploads"
end
process :resize_to_fit => [80, 80]
end
class Image
include Mongoid::Document
mount_uploader :img, Uploader
end
....
post '/upload' do
@img = Image.new
@img.img = …Run Code Online (Sandbox Code Playgroud) 我试图拆分我目前的Ruby on Rails 3 Web应用程序和它的Web服务(API).我的Web应用程序在Heroku上运行,并在我的应用程序中将API实现为命名空间路由.例如,/events返回HTML页面并/api/v1/events返回JSON数据.
根据一些最佳实践,我想将它们分成两个不同的应用程序.我选择了Sinatra来实现API应用程序.它现在适用于不需要身份验证的简单请求.
我的Ruby on Rails 3应用程序正在使用Devise来验证用户身份.还可以使用Facebook帐户登录.现在我想要实现的是使用Warden通过我的基于Sinatra的API对用户进行HTTP基本身份验证(包括注册).
最好的方法是什么?或者也许我可以使用与Warden不同的东西?
请记住,我对Rack不是很熟悉:)
我在使用jQuery从random.org请求随机数时遇到问题.当我使用静态页面和以下javascript时,我没有任何问题得到随机数.但是,我正在Heroku上托管一个Sinatra应用程序(同样,当使用Thin在本地生产我的应用程序时)我得到"(Access-Control-Allow-Origin"不允许"(网站)".
function raffler(){
var rowCount = $('#winnerTable tr').length;
$('#winnerButton').click(function() {
$.get("http://www.random.org/integers/?", {num: "1", min: "1", max: rowCount, col: "1", base: "10", format: "plain", rnd: "new"}, function(randNum) {
var myNumber = randNum;
$("#entry-" + randNum).addClass('winner');
});
});
};
Run Code Online (Sandbox Code Playgroud)
思考?
我正在尝试使用标准类型ObjectID的_id检索存储在MongoDB中的文档.我将_id表示为字符串.在这个例子中它是"4ec064e406a6f1205a000001"
所以我这样做:
require 'mongo'
connection = Mongo::Connection.new("localhost", 27017).db("store")
collection = connection.collection("products")
id = '4ec064e406a6f1205a000001'
# What should the following line be? This doesn't work.
collection.find_one("_id" => Mongo::ObjectID.from_string(id))
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个BSON ObjectID,我尝试了一些不同的方法来使用bson gem生成正确的对象,但我无法让它工作.我也尝试使用类似的代码将对象的_id中的一个更改为标准的Int32,并且它工作正常.我不知道如何创建用于此查询的正确ObjectID对象.
谢谢!
我正在构建一个sinatra应用程序,它将使用Highrise CRM gem访问Highrise数据.从wiki中使用这个gem的示例代码,
require 'highrise'
Highrise::Base.site = 'https://your_site.highrisehq.com'
Highrise::Base.user = 'api-auth-token'
Run Code Online (Sandbox Code Playgroud)
我想为每个请求更改用户和站点字段,因为每个请求可以针对不同的用户.目前这些是类变量.即使我为每个请求设置了这些字段,当多线程场景中有多个请求时,这不会导致竞争条件吗?有人可以建议以线程安全的方式为每个请求设置用户/站点字段的最佳实践吗?
由于某种原因,heroku试图要求dm-sqlite-adapter,即使它应该在这里使用Postgres.请注意,当我打开任何URL时会发生这种情况 - 而不是在git push本身.
我建立了默认的Facebook应用程序.
Gemfile:
source :gemcutter
gem "foreman"
gem "sinatra"
gem "mogli"
gem "json"
gem "httparty"
gem "thin"
gem "data_mapper"
gem "heroku"
group :production do
gem "pg"
gem "dm-postgres-adapter"
end
group :development, :test do
gem "sqlite3"
gem "dm-sqlite-adapter"
end
Run Code Online (Sandbox Code Playgroud)
数据映射器设置:
# Setting up the database
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/data/mydatabase.db")
Run Code Online (Sandbox Code Playgroud)
打开任何URL时的相关日志片段:
Starting process with command `bundle exec thin -R config.ru start -p 34984`
2012-01-18T15:11:55+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-sqlite-adapter (LoadError)
2012-01-18T15:11:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in …Run Code Online (Sandbox Code Playgroud) 我使用Mechanize作为命令行实用程序编写了一个简单的Web爬网程序.然后我决定使用Sinatra创建Web应用程序,但在尝试运行本地Web服务器时遇到了这个错误:
/home/nazar/.rvm/gems/ruby-2.0.0-p195/gems/sinatra-1.4.2/lib/sinatra/base.rb:1569:in `run!': undefined method `run' for HTTP:Module (NoMethodError)
from /home/nazar/.rvm/gems/ruby-2.0.0-p195/gems/sinatra-1.4.2/lib/sinatra/main.rb:25:in `block in <module:Sinatra>'
Run Code Online (Sandbox Code Playgroud)
源代码很简单:
require 'sinatra'
require 'mechanize'
get '/' do
# mechanize stuff
end
Run Code Online (Sandbox Code Playgroud)
我经历了一些调查,并设法发现2个宝石分别工作正常,但只有它们合并才会导致问题.任何人都可以指出问题可能是什么?
我有一个有多种布局的Sinatra应用程序.我想将它们隔离到自己的子目录中views:
app.rb
views/
views/layouts/
views/layouts/default.haml
views/layouts/print.haml
views/layouts/mobile.haml
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了我必须使用每个渲染调用显式设置布局:
get '/' do
haml :index, {:layout => :'layouts/default'}
end
Run Code Online (Sandbox Code Playgroud)
有没有办法全局设置布局(例如,对于模块中的所有路径),或者告诉Sinatra在默认目录之外寻找布局?
我一直在考虑学习如何基于网络技术制作简单的Mac OS X应用程序,我遇到了node-webkit,这看起来很引人注目.但是,我最近投入了学习Sinatra/Ruby的基础知识,我想继续学习这门课程.
对于使用Sinatra的开发人员,是否存在"node-webkit等效"?或者,是否有推荐的方法使用Sinatra框架(或Ruby)来构建基本上是Web包装器的OS X应用程序?
sinatra ×10
ruby ×6
heroku ×2
mongodb ×2
carrierwave ×1
chromium ×1
datamapper ×1
devise ×1
highrise ×1
jquery ×1
layout ×1
mechanize ×1
mongoid ×1
mongomapper ×1
node-webkit ×1
nosql ×1
warden ×1
webkit ×1