标签: sinatra

Rails 4:ActiveRecord“all”的替代方案,因为它现已弃用

ActiveRecord 4.0.0 版本中的ActiveRecord 功能是否find_each可以接受替代?all

例如,之前我有:

all_users = User.all
Run Code Online (Sandbox Code Playgroud)

它会产生一条警告,指出类似于 ActiveRelation:all 的内容已被弃用。

作为替代,我想出了:

User.find_each do |user|
  all_users += user
end
Run Code Online (Sandbox Code Playgroud)

这是可以接受的,还是我应该以另一种方式做?

我理解使用背后的原因find_each是因为“批处理”,如果存在非常大的数据集,它将允许查询停止运行。我们假设这种情况下数据集很小。

编辑

似乎只有当您使用条件时才会出现弃用错误,例如:

User.all(:conditions => ["name like ?", "%bob%"]) 
Run Code Online (Sandbox Code Playgroud)

产生:

弃用警告:Relation#all 已弃用。如果你想立即加载一个关系,你可以调用#load(例如 Post.where(published: true).load)。如果你想从关系中获取记录数组,你可以调用#to_a(例如Post.wher e(published: true).to_a)。(从 (irb):8 处的 irb_binding 调用)

上述内容的正确替换似乎是:

User.where("name like ?", "%bob%")
Run Code Online (Sandbox Code Playgroud)

ruby activerecord sinatra ruby-on-rails-4 sinatra-activerecord

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

如何修复 Heroku 上的“sequel::DatabaseDisconnectError - Mysql::Error: MySQL 服务器已消失”

我有一个简单的 Sinatra 应用程序托管在 Heroku 上,并使用 Sequel 通过 ClearDB 插件连接到 MySql 数据库。

该应用程序工作正常,除非它闲置超过一分钟。在这种情况下,我发出的第一个请求给出了“500 内部服务器错误”,heroku logs显示为:

sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)

如果我在出现此错误后刷新页面,则它工作正常,并且直到应用程序闲置一分钟左右,错误才会返回。

该应用程序正在运行两个 dyno,因此问题不是由您可能在免费帐户上看到的 Heroku dyno 空闲引起的。我联系了 ClearDB 支持,他们给了我以下建议:

如果您使用连接池,那么您应该将空闲超时设置为略低于 60 秒和/或设置保持活动状态,如下所述。如果您没有使用连接池,那么您必须确保应用程序在查询后实际关闭连接,并且不依赖网络超时来关闭它们。

我知道我可以创建一个 cron 作业来每 30 秒左右访问一次服务器,但这似乎是一个不雅的问题解决方案。关于确保应用程序关闭连接的另一个建议我不明白。我只是使用 Sequel 进行查询,我假设 Sequel 在幕后为我管理连接。我是否需要对其进行配置以确保它关闭连接?我该怎么做?

ruby heroku sinatra sequel cleardb

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

什么是将小型红宝石应用程序放到网上的最佳方式?

我写了一个小的ruby应用程序,这是一个anagram搜索器.这是学习红宝石,但我想把它放在网上供个人使用.我对Rails有一些经验,很多人都推荐过Sinatra.我也没关系,但我找不到有关如何使用文本文件而不是数据库的任何信息.

应用程序非常简单,对单词列表的文本文件进行验证,然后查找所有字谜.我一直认为这应该很简单,但是我坚持将该文本文件导入Rails(如果我选择那样的话,那就是Sinatra).在Rails项目中,我将文本文件放在lib目录中.

不幸的是,即使Rails中的路径看起来是正确的,我也会收到错误:

no such file to load -- /Users/court/Sites/cvtest/lib/english.txt 
Run Code Online (Sandbox Code Playgroud)

(cvtest是rails项目的名称)

这是代码.它本身很好用:

file_path = '/Users/court/Sites/anagram/dictionary/english.txt'

input_string = gets.chomp


# validate input to list
if File.foreach(file_path) {|x| break x if x.chomp == input_string}

  #break down the word
  word = input_string.split(//).sort 

  # match word  
  anagrams = IO.readlines(file_path).partition{
    |line| line.strip!
    (line.size == word.size && line.split(//).sort == word)
  }[0] 

  #list all words except the original
    anagrams.each{ |matched_word| puts matched_word unless matched_word == input_string } 


#display error if 
else
  puts "This …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails sinatra

3
推荐指数
2
解决办法
703
查看次数

使用Rack :: Session :: Datamapper

mkristgan的rack_datamapper gem说它"可以被包装用于特定的环境,即Rack :: Session :: Datamapper".

不幸的是,我还不太了解Ruby来完成这项任务 - Ruby中的模块/类仍然在我的头上(来自PHP).

任何人都可以使用rack_datamapper来实现Rack :: Session :: Datamapper吗?

你可能不想这样做.

下面的答案很好,但经过仔细考虑,我意识到我不应该这样做.相反,我将user_id,ip和名字(为方便起见)放在cookie中并保护它.

ruby session rack datamapper sinatra

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

在模型数组上激活记录to_json\as_json

首先,我没有使用Rails.我正在使用Sinatra进行Active Record的这个项目.

我希望能够在我的Model类上覆盖to_json或as_json,并让它定义一些'default'选项.例如,我有以下内容:

class Vendor < ActiveRecord::Base
  def to_json(options = {})
    if options.empty?
      super :only => [:id, :name]
    else
      super options
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

其中Vendor具有的属性多于id和name.在我的路线中,我有以下内容:

@vendors = Vendor.where({})
@vendors.to_json
Run Code Online (Sandbox Code Playgroud)

@vendors是一个Array供应商对象(显然).但是,返回的json不会调用我的to_json方法并返回所有模型属性.

我实际上没有选择修改路线,因为我实际上使用的是修改过的sinatra-rest gem(http://github.com/mikeycgto/sinatra-rest).

有关如何实现此功能的任何想法?我可以在我的sinatra-rest gem中做类似下面的事情,但这看起来很傻:

@PLURAL.collect! { |obj| obj.to_json }
Run Code Online (Sandbox Code Playgroud)

ruby activerecord activesupport sinatra

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

padrino启动时的notmethod错误

不幸的是,在开始时迷路了.使用官方指南http://www.padrinorb.com/创建第一个test_app

当尝试"padrino start"应用程序启动时,服务器在控制台中运行良好,但是一旦我尝试在borwser中看到它,就会出现以下错误消息:

/ admin/undefined方法中的NoMethodError`匹配?' for nil:NilClass文件:routing.rb location:route line:66

此外,我看不到favicon,而控制台说它无法找到它.

(尝试使用Thin和Webrick.我正在使用Ubuntu和RVM Ruby1.9 Gem 1.3.7 Rails3.更新了Sinatra和Padrino宝石,进行了清理.)

非常感谢,gezope

sinatra padrino

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

Sinantra,如何在POST处理程序中访问URL params,例如"?something = xyz"(它不在params []中)

我们正在使用第三方Web服务将POSTS多部分数据(文件)发回给我们.但它也通过网址传递额外的参数 http://ourdomain.com/theposturl?extra=good

'filename'对象:filename和:二进制数据的tempfile是params []

但是我们如何从网址中获得"好"呢?

post /theposturl
  puts params.inspect    # this shows a hash with filename, 
                         # :filename and :tempfile as expected

  extra_param = ??????[:extra] # but what lets us 'read' the ?extra=good off the url

end
Run Code Online (Sandbox Code Playgroud)

param http-post sinatra

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

使用Datamapper和Sinatra进行简单搜索

我对Ruby和后端开发一般都是新手.话虽这么说,我正在尝试创建一个简单的搜索表单.我使用Sinatra作为框架,使用Datamapper作为我的ORM.做这个的最好方式是什么?下面是我的架构我希望搜索操作同时搜索磁贴和类别.

require 'sinatra'
require 'datamapper'


DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/cal.db")

class Event
  include DataMapper::Resource

  property :id,               Serial
  property :title,            String
  property :text,             Text
  property :contact_name,     String
  property :contact_email,    String
  property :location,         String
  property :event_start_time, String
  property :event_end_time,   String
  property :category,         String
  property :created_at,       DateTime
  property :approved,         Boolean, :default => false

end

DataMapper.auto_upgrade!


post '/search'  do
   @results = Event.all
   erb :layout
end
Run Code Online (Sandbox Code Playgroud)

============ layout.erb

<form action="/search" method="post">
  <input type="text" name="query"/><br />   
  <input type="submit" />
</form>

<% if @results %>
    <table>
        <%@results.each do |r|%>
        <tr …
Run Code Online (Sandbox Code Playgroud)

ruby search datamapper sinatra

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

在Sinatra应用程序中设置环境变量?

我想MONGOHQ_URL在我的sinatra应用程序中设置以便能够这样做:

uri = URI.parse(ENV['MONGOHQ_URL'])
Run Code Online (Sandbox Code Playgroud)

我该如何设置MONGOHQ_URL

ruby sinatra mongohq

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

Heroku和Datamapper问题

我可以在Heroku上启动一个基本的应用程序,显示带有'/'的消息......工作得很好.但是,每当我尝试使用datamapper添加sqlite时,事情就会崩溃.

要查看我的应用程序结构,请查看github上的项目.我保持代码相当简陋.

在heroku的日志中我得到:

2011-06-26T21:28:36+00:00 app[web.1]: /app/.bundle/gems/ruby/1.9.1/gems/dm-core-1.1.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-postgres-adapter (LoadError)
Run Code Online (Sandbox Code Playgroud)

关于这一点的是我没有使用postgres,所以我很困惑为什么这么说.

ruby sqlite datamapper heroku sinatra

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