标签: rackup

通过Sinatra应用程序将选项传递给rackup

我是红宝石的新手,学习Sinatra.虽然通过'sinatra'直接要求和设置路径来创建Sinatra站点非常简单并且有很好的文档记录,但通过要求'sinatra/base'和编写一个继承自'Sinatra::Base' 的类来创建应用程序,虽然仍然相对容易,但是文档记录很差(可能因为它是一个最近Sinatra的特色).

而这正是我在做的事情.我在Sinatra部分没有太多麻烦,但是我在rackup/thin/server部分遇到了一些麻烦.显然,有两种方法可以部署应用程序:使用Sinatra本身(使用该run!方法)和使用rackup文件(通常config.ru).

使用Sinatra的run!方法非常直观,就像一个魅力,但显然如果我想在heroku上部署我的应用程序它不起作用.事实上,我在GitHub上遇到的几乎所有Sinatra应用都使用了一个config.ru文件.

使用rackup文件可能同样直观,但我无法理解如何将选项从Sinatra应用程序传递到服务器(ir:端口).我尝试将选项合并到rackup的默认选项数组:

MyApp::App.default_options.merge!(
  :run  => false,
  :env  => :production,
  :port => 4567
)

run MyApp::App
Run Code Online (Sandbox Code Playgroud)

通过直接向应用添加选项:

MyApp::App.set :port, 4567
MyApp::App.set :run, false
MyApp::App.set :env, :production

run MyApp::App
Run Code Online (Sandbox Code Playgroud)

通过在应用程序类中设置选项:

module MyApp
  class App < Sinatra::Base
    set :port, 4567
    set :run, false
    set :env, :production

    # ...

  # config.ru
  require 'app'

  run MyApp::App
Run Code Online (Sandbox Code Playgroud)

上述所有方法都失败了,要么显示错误消息,要么不考虑任何选项.那么在使用rackup文件时,有没有办法通过Sinatra应用程序将选项传递给rackup/thin/the sever?或者问题中的选项应该通过命令行选项直接传递给rackup/thin/the sever?

作为问题的参考,这里是我正在构建的小型Sinatra应用程序:https://github.com/AzizLight/Wiki/

ruby rack thin sinatra rackup

12
推荐指数
1
解决办法
8635
查看次数

寻找机架应用程序结构和config.ru规格?

这可能会让我看起来很蹩脚但仍然 - 我找不到任何典型的机架应用程序结构(文件夹/文件,如public,config.ru)或config.ru文件内容的正式描述.

在Java世界中,有一个明确的Web应用程序定义及其组成的部分(WEB-INF,META-INF web.xml).

是否有Rack Web应用程序的规范?或者像Ruby本身一样含糊不清.

我希望在http://rack.rubyforge.org/网站上的某个地方找到这些信息,但我不能.请指出我正确的方向.


虽然我将这个问题标记为已回答,但值得一提的是,这个问题本身并不合法.应用程序结构由正在使用的实际webserver /插件组合驱动,如Apache/Passenger,而不是Rack.

ruby rack rackup

12
推荐指数
1
解决办法
3049
查看次数

无法使用rackup和jRuby启动简单的Sinatra应用程序(Web服务器无响应)

我有一个Sinatra"hello world"应用程序,我试图使用jRuby运行.它在我运行应用程序时有效,但在我运行机架时则无效.谁能告诉我这里发生了什么?

这是应用程序,在'app.rb'文件中:

require 'rubygems'
require 'bundler/setup'
require 'sinatra'

configure do
  set :bind, '0.0.0.0'
end

get '/' do
  'Boo!'
end
Run Code Online (Sandbox Code Playgroud)

我可以运行它bundle exec ruby app.rb,它工作正常:

jonea@centos7andy[~/andy/sinatra_sand_jruby]%: bundle exec ruby app.rb
[2015-01-12 10:36:06] INFO  WEBrick 1.3.1
[2015-01-12 10:36:06] INFO  ruby 1.9.3 (2014-12-09) [java]
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick
[2015-01-12 10:36:06] INFO  WEBrick::HTTPServer#start: pid=31654 port=4567
Run Code Online (Sandbox Code Playgroud)

这是我的config.ru来调用上面的程序:

require 'rubygems'
require 'bundler/setup'
require 'sinatra'
require './app'

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

如果我运行它,它似乎工作,但我无法使用Web浏览器访问服务器:

jonea@centos7andy[~/andy/sinatra_sand_jruby]%: bundle exec rackup -p4567 …
Run Code Online (Sandbox Code Playgroud)

ruby jruby sinatra rackup

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

Sinatra错误(bundler:无法加载命令:rackup)

在将模块化Sinatra应用程序部署到Heroku时,我不断收到此错误:

bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.4.0/bin/rackup)

我试过调整我的config.ru和我的Procfile,没有成功.以下是config.ru的内容:

$LOAD_PATH.unshift(::File.expand_path('lib', ::File.dirname(__FILE__)))

require_relative 'lib/app'
run Tir::App
Run Code Online (Sandbox Code Playgroud)

Procfile:

web: bundle exec rackup config.ru -p $PORT
Run Code Online (Sandbox Code Playgroud)

LIB/app.rb:

require 'sinatra/base'
module Tir
 class App < Sinatra::Base
  # code
 end
end 
Run Code Online (Sandbox Code Playgroud)

请指出我正确的方向.

PS.我可以部署应用程序,但在尝试使用Pony gem发送电子邮件时会出现上述错误.

编辑20.07.2018: 我已经调试了这个问题并找到导致崩溃的线路:

https://gist.github.com/abbottjam/248edfd50f094f99b3bf5b1f995fd290#file-static-rb-L15

错误消息现在说:

内部服务器错误:没有将Array隐式转换为String

所以它必须是configure_options下面方法中的代码块.仍然不知道数组 - >字符串转换应该在哪里发生.谢谢.

config heroku sinatra rackup procfile

9
推荐指数
1
解决办法
295
查看次数

Sinatra通过rackup不喜欢内联模板

在致电sinatra本身时,$ ruby tubemp.rb有效.但通过rackup它没有.应用程序,以某种方式找不到内联模板.

#config.ru
require 'rubygems'
require 'sinatra'

set :environment, ENV['RACK_ENV'].to_sym
disable :run, :reload

require './tubemp.rb'

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

No such file or directory - /home/ber/Documenten/ET_tubemp/code/views/index.erb:
Run Code Online (Sandbox Code Playgroud)

相关部分来自 tubemp.rb

get '/' do
  #...
  erb :index
end

__END__
@@ layout
<html>
...
<%= yield %>

@@ index
Welcome!
Run Code Online (Sandbox Code Playgroud)

不知何故,通过rackup,它希望视图存在于实际的视图文件中.我想当__END__包含左右时,机架无法处理令牌.

除了将模板移动到模板文件之外,我该如何处理?

templates sinatra rackup

7
推荐指数
1
解决办法
908
查看次数

无法加载此类文件 - rack/handler/puma

我的设置和错误

当我用机架和美洲狮开始我的Sinatra应用程序时出错.我的config.ru文件看起来像这样:

#\ -s puma
require './controller/main.rb'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

因此,当我现在使用rackup时,我收到此错误:

/home/username/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/handler.rb:76:in"require":无法加载此类文件 - 机架/处理程序/ puma(LoadError)

我用ruby 1.9.3p392(2013-02-22修订版39386)[i686-linux]

到目前为止我尝试过的

我的第一个想法是我忘了安装美洲狮,或者美洲狮在某种程度上被打破了.所以我尝试过:

puma -v
puma version 2.0.1
Run Code Online (Sandbox Code Playgroud)

我直接用ruby开始它:

ruby controller/main.rb 
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:4567
Run Code Online (Sandbox Code Playgroud)

我发现了这个美洲狮问题,但我找不到真正的解决方案.

最后我的问题

  1. 为什么要发生这种情况?

  2. 我怎样才能解决这个问题?

ruby sinatra rackup puma

7
推荐指数
1
解决办法
8321
查看次数

rackup:找不到命令

我目前正在开发一个需要在ubuntu 11.04上使用rackup命令的项目,但是我收到了一个错误:-bash: rackup: command not found.我已经安装了导轨和机架红宝石宝石.

任何帮助都会很棒!

ruby ubuntu rack rubygems rackup

5
推荐指数
2
解决办法
9145
查看次数

带有Puma的Sinatra在终端中输出两倍的输出

我已将Puma添加到我的sinatra应用程序中,现在我在终端中获得两行输出请求.我已经检查过它实际上并没有两次调用代码,我猜测也许Puma正在输出请求信息以及Sinatra.

作为演示,我创建了一个简单的应用程序如下:

的Gemfile

source 'https://rubygems.org'
ruby '2.2.0'

gem 'sinatra'
gem 'puma'
Run Code Online (Sandbox Code Playgroud)

config.ru

require 'sinatra'

get '/' do
  'Hello World'
end

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

这是我运行的命令:

rackup -s puma
Run Code Online (Sandbox Code Playgroud)

这是我浏览http:// localhost:9292 /时收到的输出类型

R5001755:test louis.sayers$ rackup -s puma
Puma 2.11.3 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:9292
::1 - - [03/Jul/2015:21:46:37 +1000] "GET / HTTP/1.1" 200 11 0.0074
::1 - - [03/Jul/2015:21:46:37 +1000] "GET / HTTP/1.1" 200 11 0.0222
Run Code Online (Sandbox Code Playgroud)

如果你想玩一个游戏,我已经将示例项目上传到了github

关于发生了什么的任何想法?谢谢你的帮助!

logging sinatra rackup puma

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

如何创建config.ru文件和Rakefile?

我知道你通过输入"bundle init"从命令行创建一个Gemfile.但是你如何创建config.ru文件和Rakefile?

ruby rackup

2
推荐指数
1
解决办法
1364
查看次数

在Heroku上部署Sinatra应用程序

关于在Heroku上部署Sinatra应用程序,我感到很困惑的事实上并不是一个实际问题 - 只是一个概念上的难题.

我有两个应用程序,几乎在每个方面都相同,只是一个将大部分逻辑放在一个不包含Sinatra :: Base类的文件中,并使用'require otherfilename'来获取它需要的逻辑.Sinatra:Base类名为Kincalc.

对于包含一个文件中所有逻辑的应用程序(即包含Sinatra:Base类的同一文件),在我的config.ru文件中,最后一行显示"运行Sinatra :: Application",它启动正常.但在另一个应用程序中,如果我将其作为最后一行包含,则应用程序正确上传并说它"已部署到Heroku"但它会显示"未找到"消息.当我有最后一行读'run Kincalc'时,它加载正常.

我已经来回检查了这两个应用程序是如何构建的,除了一个人使用第二个文件作为逻辑(也是在root用户)的事实.为什么这是一个问题,还是这真的是问题?当我尝试将第二个文件(没有Sinatra类的文件)放在一个单独的lib文件夹中时,它在我调用类名时仍然有效,但在我调用"Sinatra :: Application"时却不行.

configuration sinatra rackup

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

标签 统计

rackup ×10

sinatra ×7

ruby ×6

rack ×3

puma ×2

config ×1

configuration ×1

heroku ×1

jruby ×1

logging ×1

procfile ×1

rubygems ×1

templates ×1

thin ×1

ubuntu ×1