标签: sinatra

如何在我的Sinantra应用程序/环境下运行Rake任务?

我正在使用Sinatra,我想设置一些Rails具有的便利rake任务,特别是rake db:seed.

我的第一关是这个:

namespace :db do
  desc 'Load the seed data from db/seeds.rb'
  task :seed do
    seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb')
    system("racksh < #{seed_file}")
  end
end
Run Code Online (Sandbox Code Playgroud)

racksh是一个模仿Rails控制台的宝石.所以我只是将种子文件中的代码直接输入它.它有效,但显然不理想.我想做的是创建一个环境任务,允许命令在Sinanta应用程序/环境下运行,如下所示:

task :environment do
  # what goes here?
end

task :seed => :environment do
  seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb')
  load(seed_file) if File.exist?(seed_file)
end
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何设置环境,以便rake任务可以在其下运行.任何帮助将非常感激.

ruby rake ruby-on-rails sinatra

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

什么是sinatra的控制器?

我被问到为什么"我在我的视图中创建了复杂的Ruby变量.我的控制器不应该声明这些变量吗?"

我的sinatra控制器是我的.rb文件吗?我有一个.rb文件和视图视图.

ruby sinatra

10
推荐指数
3
解决办法
5566
查看次数

覆盖Sinatra默认的NotFound错误页面

有没有办法覆盖sinatra默认的NotFound错误页面("Sinatra不知道这个小曲")?我希望sinatra只显示一个普通的字符串作为"找不到方法",当它找不到合适的路由时,但是当我从路由中引发404错误时,我希望它显示传入的错误消息.

像这样实现not_found块:

 not_found do
    'Method not found.' 
  end
Run Code Online (Sandbox Code Playgroud)

工作,但它不是一个有效的选项,因为我希望能够从这样的路线抛出我自己的NotFound错误消息:

 get '/' do
    begin
      # some processing that can raise an exception if resource not found
    rescue => e
      error 404, e.message.to_json
    end
  end
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,not_found块会覆盖我的错误消息.

ruby sinatra

10
推荐指数
3
解决办法
5548
查看次数

使用RVM使用sinatra app加载Active Record gem时出错

我为我正在启动的sinatra应用程序设置了一个项目级别的RVM gemset,它将使用Active Record连接到本地数据库.为了测试它,我尝试运行以下测试应用程序:

test.rb

require 'rubygems' # may not be needed, depending on platform
require 'sinatra'
require 'activerecord'

class Article < ActiveRecord::Base
end

get '/' do
  Test.establish_connection(
    :adapter => "sqlite3",
    :database => "hw.db"
  )
  Test.first.content
end
Run Code Online (Sandbox Code Playgroud)

(摘自这个问题的答案:使用Sinatra时与数据库交谈的最佳方式是什么?)

当我运行时,ruby -rubygems test.rb我收到此错误:

/Users/[user]/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- activerecord (LoadError)
Run Code Online (Sandbox Code Playgroud)

我已经安装了Active Record gem,它会显示出来gem listrvm current显示正确的gemset.我是RVM的新手,我认为这与它没有正确的加载路径有关,但我觉得我已经正确设置了所有内容,所以我很欣赏有关错误的建议.谢谢.

ruby activerecord rubygems sinatra rvm

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

如何使用.html.erb作为Sinatra视图的文件扩展名?

如果我有以下Sinatra代码:

get '/hi' do
  erb :hello
end
Run Code Online (Sandbox Code Playgroud)

如果我有一个名为的文件,这很好用views/hello.erb.但是,如果我有一个名为views/hello.html.erbSinatra的文件找不到该文件并给我一个错误.我如何告诉Sinatra我希望它.html.erb作为有效的.erb扩展名寻找?

ruby erb sinatra

10
推荐指数
2
解决办法
6953
查看次数

如何在请求范围之外访问Sinatra的Logger

似乎Sinatra的记录器仅在请求处理程序中可用(请参阅https://github.com/sinatra/sinatra#logging),但如果我想在其他地方使用记录器,例如在帮助程序方法或配置中,该怎么办?钩?Sinatra记录仪是否可通过其他方式获得?

ruby logging sinatra

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

Sinatra和问号

我需要用Sinatra制作一些看起来像的方法:

访问http //:本地主机:1234 /添加string_to_add

但是当我宣布它是这样的:

get "/add?:string_to_add" do
...
end
Run Code Online (Sandbox Code Playgroud)

它没有看到string_to_add参数.

我应该如何声明我的方法并使用此参数来使事情有效?

ruby get params sinatra

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

在Sinatra的自定义错误块中设置状态代码

我有400状态代码的自定义错误消息:

get '/do' do
  raise ParamXMissingError unless params['x']
end

error ParamXMissingError do
  haml :custom_error_page
end
Run Code Online (Sandbox Code Playgroud)

我希望ParamXMissingError为400,但是当我运行上面的代码,并通过Firefox网络工具检查时,似乎Sinatra实际上返回500而不是400.如何让它显示custom_error_page.haml并返回400?

最好是从错误块中处理状态代码和页面是很好的,而不是我在提升时会撒上的东西ParamXMissingError.例如,这将是重复的,并不是一个好的解决方案:halt 400, haml(:custom_error_page)

ruby rack sinatra http-status-code-301

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

Ruby中的Sinatra错误处理

我有一个简单的Sinatra休息,我无法捕获错误.我也承认我对Ruby和Sinatra很新.

当我在post端点中引发并出错时,我想报告传入的文档.我需要1)处理post结果中的错误(我可以访问@incoming)或2)将传入的文档传递给错误并在那里报告.

什么是更好的选择,选项1或选项2?

  • 如果我留在选项1,我如何防止错误收到错误(因为它似乎现在正在做)
  • 如果我转到选项2,如何将传入传递给错误?

以下是我的代码示例:

post ('/result') do 

  begin  
  @incoming = JSON.parse(request.body.read)

  //do something that causes an error
  rescue
     e = env['sinatra.error']
     url = request.url
     ip = request.ip

     @actlogpassblock = {  :message => e.message,
                        :path => url,
                        :ip => ip,
                        :timestamp => Time.new,
                        :type => "500",
                        :sub => "RES",
                        :payload => @incoming
                      }        
    action_log.insert(@actlogpassblock)
    status 500 
  end
end

error do
   status 500 
   e = env['sinatra.error']
   url = request.url
   ip = request.ip
   backtrace = "Application error\n#{e}\n#{e.backtrace.join("\n")}"

  @actlogpassblock = {  :message …
Run Code Online (Sandbox Code Playgroud)

ruby error-handling sinatra

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

空的,不可编辑的pg_hba.conf文件

我正在尝试使用本教程将我的Sinatra应用程序连接到PostgreSQL数据库:http://samuelstern.wordpress.com/2012/11/28/making-a-simple-database-driven-website-with-sinatra-and-heroku /.一切顺利,直到我尝试执行:

rake:db migrate
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

rake aborted!
PG::ConnectionBad: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)

好像我应该在pg_hba.conf文件中更改我的权限,但是,打开它,我什么也看不见.并且,如果我尝试在其中写入内容,它会说它是" 只读 ".

我是否正确摆脱错误以及下一步该走向何方?

编辑:实际上,如果我尝试从另一个文本编辑器打开它,它说我没有权限.

authentication postgresql sinatra

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