我想打开我的Rails 2.3应用程序(在Heroku上托管)给开发人员.我想到了两种方法:
我知道这是一个模糊的问题.你有什么好的文章或建筑模式可以帮助我吗?
谢谢,
凯文
我有一个非常简单的Sinatra应用程序,我在测试时遇到了问题.
基本上,当我从浏览器中的测试中知道请求正常工作时,每个请求测试都会返回404.关于问题可能是什么的任何想法?
test_helper.rb中:
ENV["RACK_ENV"] = 'test'
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
require 'app'
Sinatra::Synchrony.patch_tests!
class Test::Unit::TestCase
include Rack::Test::Methods
end
Run Code Online (Sandbox Code Playgroud)
app_test.rb
require 'test_helper'
class AppTest < Test::Unit::TestCase
def app
@app ||= Sinatra::Application
end
def test_it_says_hello
get "/"
assert_equal 200, last_response.status
end
end
Run Code Online (Sandbox Code Playgroud)
app.rb
$: << 'config'
require "rubygems" require "bundler"
ENV["RACK_ENV"] ||= "development"
Bundler.require(:default, ENV["RACK_ENV"].to_sym)
require ENV["RACK_ENV"]
class App < Sinatra::Base register Sinatra::Synchrony
get '/' do
status 200
'hello, I\'m bat shit crazy and ready to rock'
end
end
Run Code Online (Sandbox Code Playgroud)
的Gemfile
source …Run Code Online (Sandbox Code Playgroud) 在Ruby中使用特定的代码库时,我经常发现自己不知道要解救什么异常.
例如,我经常使用HTTParty来处理我的rails/sinatra app会发出的任何HTTP请求.我挖掘了HTTParty的代码,发现了一个包含已定义的异常的文件.大!我会在提出请求时拯救他们.
为了测试它,我为请求输入了一个虚假的域名,但我没有预期的HTTParty :: ResponseError异常,而是得到了一个SocketError异常.
处理这个问题的最佳方法是什么?我知道HTTParty是Ruby实现的包装器,这可能是抛出SocketError异常的原因.但我怎么知道呢?
我可以通过拯救"异常"来解决这个问题,但这是非常糟糕的做法.我宁愿清楚我可能造成的异常并处理这些异常.
编辑:我应该澄清,真正促使我创建这个问题的是我不知道如何能够找出在调用特定函数时可能引发的异常...也就是说,无需查看每个函数调用在堆栈中.
我正在构建一个Sinatra应用程序,该应用程序需要将文件发送给刚从其他位置下载的用户(实际上是代理)。
尽管我可以完成大部分工作,但我无法让Sinatra发送代码中指定的正确文件名。我使用的代码是:
get '/' do
attachment file.name
headers['Content-Type'] = file.content_type
headers['Content-Disposition'] = 'attachment'
file.body
end
Run Code Online (Sandbox Code Playgroud)
(file.body是文件的内容)
如何让Sinatra使用所需的文件名?
我有一个阵列 [["Company Name", "Field6"], ["Email", "Field5"]]
从该数组我创建具有值的字段数组:
[
[{:label=>"Company Name", :value=>"gfdgfd"}],
[{:label=>"Email", :value=>"gfdgfd@gfd.pl"}]
]
Run Code Online (Sandbox Code Playgroud)
运用
fields = [["Company Name", "Field6"], ["Email", "Field5"]]
# first element in array is Label and second is param id
fields_with_values = fields.collect do |field|
[
label: field[0],
value: params[field[1]]
]
end
Run Code Online (Sandbox Code Playgroud)
然后我想将标签和值传递给erb模板(类似):
# template.erb
<% fields_with_values.each do |field| %>
l: <%= field.label %>
v: <%= field.value %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如何收集这些fields_with_values的最佳方式?也许我应该使用Object.new
如何设置一个简单的sinatra应用程序来使用MySQL和ActiveRecord?我找到了一些解决方案,但它们都没有工作(可能它们已经过时)了:
http://ericfarkas.com/posts/sinatra-activerecord-and-mysql/
http://labs.thredup.com/setting-up-sinatra-with-mysql-and-activerecor
那么使用Sinatra以及MySQL和ActiveRecord的最佳实践方法是什么?该https://github.com/janko-m/sinatra-activerecord宝石仅供sqlite3的,据我所看到的.
我不确定我是需要模型还是只需要简单的SQL查询.但让它一起工作对我有很大的帮助.
我在我的Sinatra应用程序上做了一个简单的测试,当我调用long处理程序时,虚拟请求被阻止.
get '/test/long' do
sleep 10
"finished"
end
get '/test/dummy' do
"dummy"
end
Run Code Online (Sandbox Code Playgroud)
我使用此命令启动了我的服务器:
bundle exec rackup -s thin
Run Code Online (Sandbox Code Playgroud)
根据Is Sinatra的多线程?,Thin应该是一个多线程Web服务器.那我的问题是什么?
my Gemfile:
source :rubyforge
gem 'sinatra', '1.2.6', :require => 'sinatra/base'
gem 'geokit', '1.6.0', :require => 'geokit'
gem 'json', '1.5.3'
gem 'dm-core', '1.2.0'
gem 'dm-timestamps', '1.2.0'
gem 'dm-migrations', '1.2.0'
gem 'dm-mysql-adapter', '1.2.0'
gem 'rack-cache', '1.0.1', :require => 'rack/cache'
gem 'rake', '10.0.0', :require => nil
gem 'hashie', '1.0.0'
gem 'thin'
gem 'shotgun'
gem 'rack-mobile-detect', '0.3.0', :require => 'rack/mobile-detect'
gem …Run Code Online (Sandbox Code Playgroud) 我在这里很黑暗.我该怎么做才能让这件事开始?
这是我找到的最接近解决方案的东西,但它对我不起作用. Sinatra:找不到模板引擎:大虾
编辑:我现在处于非常早期阶段.我真的想尝试在Prawn中创建一个hello world,从那里我将添加我的内容.像这样的东西(app.rb):
require 'prawn'
get 'report/' do
content_type 'application/pdf'
pdf = Prawn::Document.new
pdf.text "Hello World"
pdf.render
end
Run Code Online (Sandbox Code Playgroud) 我过去没有这样做过,所以我可能会在这里遗漏一些东西.
我在本地更改了'ruby-git'的Gem文件,它运行正常.在我的Github回购中,我分叉了一个宝石并对它进行了相同的更改.
在构建Sinatra应用程序以将其推送到Heroku时,我更改了Gemfile如下:
gem 'git', :git => "git://github.com/silverSpoon/ruby-git.git"`
Run Code Online (Sandbox Code Playgroud)
当我跑步时bundle install,我明白了
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using rugged 0.21.0
Using sinatra 1.4.5
Using git 1.2.8 from git://github.com/silverSpoon/ruby-git.git (at master)
Your bundle is complete!
Run Code Online (Sandbox Code Playgroud)
? gem list git,它没有显示安装的宝石. ? bundle show git,它显示了安装gem repo的路径 -/Users/jatinganhotra/.rvm/gems/ruby-2.1.3@527website/bundler/gems/ruby-git-c7fb35af1a99irb并执行2.1.3 :001 > require 'git'LoadError: cannot load such file -- git 我在这里想念傻事吗?
我正在向Sinatra应用程序发送请求:
curl -X POST --header "MyHeader: 123444" http://localhost:9292/test -d ""
Run Code Online (Sandbox Code Playgroud)
如何在路线中访问它?这些不起作用:
headers["MyHeader"]
request["MyHeader"]
request.env["MyHeader"]
Run Code Online (Sandbox Code Playgroud)
他们都是零.