部署compojure/sinatra应用程序的首选方法是什么?我在主机上运行了多个站点,因此我无法在端口80上运行jetty/mongrel.我应该如何处理在同一主机上运行的多个站点/应用程序?
我有以下小型Sinatra应用程序(我删除了额外的不需要的代码):
helpers do
def flash(args={})
session[:flash] = args
end
def flash_now(args={})
@flash = args
end
end
before do
@flash = session[:flash] || {}
session[:flash] = nil
end
post '/post' do
client = Twitter::Client.new(:login => 'xxxxxxx', :password => 'xxxxxxx')
username = params[:username]
type = params[:type]
tags = params[:tags]
budget = params[:budget]
if username != '' && type != '' && tags != '' && budget != ''
message = username + ' is looking for a ' + type + ' …Run Code Online (Sandbox Code Playgroud) 我希望我的Sinatra应用程序允许用户创建一个帐户并通过子域(即your-account.myapp.com)访问它.
我发现这是为了提取子域名(http://gist.github.com/55784#file_subdomains.rb),但我很难实现它.
有任何想法吗?
我有一个帐户模型(datamapper),其中包含一个名为帐户名称的字段,该字段应该是子域名.
谢谢!
我想从javascript开始一个很长的轮询请求,这很好,我希望我的ruby prog将多个body部分流式传输到javascript.为什么以下(伪)代码不起作用?
require 'rubygems'
require 'sinatra/async'
require 'eventmachine'
require 'thin'
require 'json'
class Test < Sinatra:Base
register Sinatra::Async
aget '/process' do
for c in 1..10
body {
{ :data => [ "this is part #{c}" ] }.to_json
end
end
end
run!
end
Run Code Online (Sandbox Code Playgroud)
也许我误解了长期轮询和异步应该做什么,但我的期望是我将多个机构送回客户端?我需要使用eventmachine吗?
谢谢
我不确定为什么,但我的会话每次请求都被删除了.
这是我的代码
require 'rubygems'
require 'sinatra'
require 'sinatra/base'
require 'haml'
require 'facebook_oauth'
class MyClass < Sinatra::Base
set :logging, true
set :sessions, true
get "/auth/facebook_callback" do
// Do some facebook login which is fine
access_token = facebookClient.authorize(:code => params[:code])
session[:access_token] = access_token.token
session[:user] = facebookClient.me.info['name']
session[:id] = facebookClient.me.info["id"]
#print session by "pp session" I can still see all the sessions
redirect '/'
end
get '/' do
#print all the sessions again. And I can't see anything. The session_id is also different …Run Code Online (Sandbox Code Playgroud) 做Sinatra 的入门.我收到此错误:
./sinatra.rb:5: undefined method `get' for main:Object (NoMethodError)
from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from sinatra.rb:3
Run Code Online (Sandbox Code Playgroud)
谷歌搜索这些错误返回ruby LoadError:无法加载这样的文件,我没有看到它与之相关Sinatra.
不确定我需要分享哪些其他信息才能使我的问题更加清晰.那么告诉我应该运行哪些其他命令来清楚地解决问题.
更新:实际代码
# sinatra.rb
require 'rubygems'
require 'sinatra'
get '/' do
'hey girl'
end
Run Code Online (Sandbox Code Playgroud) 我正在使用:ruby-1.9.3-p392和sinatra-1.4.3.
当我运行我的文件时,我得到了这个错误:
/home/belka/.rvm/gems/ruby-1.9.3-p392@Rails3.2.13/gems/sinatra-1.4.3/lib/sinatra/base.rb:1408:in `run!': undefined method `run' for HTTP:Module (NoMethodError)
from /home/belka/.rvm/gems/ruby-1.9.3-p392@Rails3.2.13/gems/sinatra-1.4.3/lib/sinatra/main.rb:25:in `block in <module:Sinatra>'
Run Code Online (Sandbox Code Playgroud)
我的代码是sinatra新手最简单的代码(hello.rb):
require 'rubygems'
require 'sinatra'
get '/' do
'Hello World!'
end
Run Code Online (Sandbox Code Playgroud) 我想在我的Sinatra应用程序中运行我的Rakefile中包含的rake任务(迁移).我正在使用Mina进行部署.rake migrate如果我在服务器或我的开发上运行它,效果很好,但我不能让Mina执行任务.
我当前的部署看起来像这样 config/deploy.rb
task :deploy => :environment do
deploy do
# Put things that will set up an empty directory into a fully set-up
# instance of your project.
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
to :launch do
queue "sudo /opt/nginx/sbin/nginx -s reload"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我尝试了两者queue "rake migrate"并queue "#{rake} migrate"在部署块内和发射块内,但它总是抱怨bash: command not found
我有一个用Sinatra编写的应用程序在本地工作,但我似乎无法推动到heroku.
当我尝试推送到heroku时,我收到以下错误:
----->编写config/database.yml以从DATABASE_URL读取无法检测rake任务确保您可以在
$ bundle exec rake -P没有环境变量且使用Gemfile的生产组的情况下针对您的应用运行.这可能是故意的,如果您希望运行rake任务取消构建(CTRL + C)并修复错误然后提交修复:rake aborted!无效的DATABASE_URL
我的Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
gem 'sinatra', require: 'sinatra/base'
gem "pg"
gem "activerecord"
gem "sinatra-activerecord"
gem "rake"
gem 'minitest', require: false
gem 'rack-test', require: false
gem 'faraday'
gem 'json'
gem 'minitest-reporters'
Run Code Online (Sandbox Code Playgroud)
我的database.yml文件
development:
adapter: postgresql
encoding: unicode
database: calendar_development
host: localhost
password:
test:
adapter: postgresql
encoding: unicode
database: calendar_test
pool: 5
host: localhost
password:
Run Code Online (Sandbox Code Playgroud)
我的config.ru
require './app'
run Sinatra::Application
ENV['RACK_ENV'] ||= 'development'
Run Code Online (Sandbox Code Playgroud)
Procfile
web: bundle exec rackup config.ru …Run Code Online (Sandbox Code Playgroud) 我使用padrino websockets(https://github.com/dariocravero/padrino-websockets)为我的网站提供聊天系统,它在我的本地机器上运行良好.但是,在部署到heroku(免费)之后,websocket将不会建立连接并返回
failed: Connection closed before receiving a handshake response
Run Code Online (Sandbox Code Playgroud)
它在localhost上正常工作,我使用它来连接:
connection = new WebSocket('ws://localhost:3000/channel');
Run Code Online (Sandbox Code Playgroud)
但是,当在heroku上使用时:
connection = new WebSocket('ws://******.herokuapp.com:3000/channel');
Run Code Online (Sandbox Code Playgroud)
它返回握手错误(上图)
我的实现服务器端
websocket :channel do
on :newmessage do |message|
currentAccount = Account.find_by(lastLoginIP: message["ip"]) rescue nil
if currentAccount != nil
broadcast :channel, {
"name" => currentAccount.nickname,
"url" => currentAccount.url,
"image" => currentAccount.image,
"chatmessage" => message["chatmessage"][0..80]
}
end
end
end
Run Code Online (Sandbox Code Playgroud)
在我的主要Padrino app.rb中,这在我的Procfile中.到底是怎么回事?
web: bundle exec puma -t 1:16 -p ${PORT:-3000} -e ${RACK_ENV:-production}
Run Code Online (Sandbox Code Playgroud)