我正在尝试在运行nginx + thin的服务器上设置多个域.例如,我希望www.domain1.com和www.domain2.com转到不同的应用程序,这些应用程序具有到各自应用程序的不同根路径.
如果您熟悉nginx,我已在本文的底部发布了我的nginx.conf文件.
我以为我可以尝试使用多个服务器块,但后来我遇到了一个问题,服务器默认选择随机瘦端口,两个域都转到同一个应用程序.*主要原因是两个应用程序的所有端口都位于thin_cluster内部.*
我想我的主要担心是有一个与特定服务器无关的thin_cluster.然后是服务器块,它具有server_name等.但是,thin_cluster不能嵌套在服务器块内.
关于如何服务多个主机的任何想法?
这是我的/etc/nginx/nginx.conf文件
user nginx;
worker_processes 5;
error_log /var/log/nginx.error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx.access.log main;
sendfile on;
keepalive_timeout 65;
upstream thin_cluster {
server 0.0.0.0:3000;
server 0.0.0.0:3001;
server 0.0.0.0:3002;
server 0.0.0.0:3003;
server 0.0.0.0:3004;
}
server {
listen 80;
server_name www.domain1.com;
root /home/ec2-user/helloCloud/public;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header …Run Code Online (Sandbox Code Playgroud) 一直在玩Capistrano以在我的服务器和我的开发机器之间进行自动部署.我几乎已经配置了,除了Capistrano似乎无法使用bundle exec命令启动我的服务器.我总是收到以下错误:
编辑:配置文件现在位于/var/www/apps/current/thin.yml
...
* executing "sudo -p 'sudo password: ' bundle exec thin start -C /var/www/thin.config.yml"
servers: ["85.255.206.157"]
[85.255.206.157] executing command
** [out :: 85.255.206.157] Could not locate Gemfile
command finished in 216ms
failed: "sh -c 'sudo -p '\\''sudo password: '\\'' bundle exec thin start -C /var/www/thin.config.yml'" on 85.255.206.157
仅复制了相关的最后一部分.整个文件等的复制工作正常.它只是启动似乎失败的集群.这是我的deploy.rb文件,它处理所有Capistrano的东西:
编辑:该文件已被修改为以下内容:
require "bundler/capistrano"
# define the application and Version Control settings
set :application, "ESCO Matching Demo"
set :repository, "svn://192.168.33.70/RubyOnRails/ESCO"
set :deploy_via, :copy
# Set the login credentials for Capistrano …Run Code Online (Sandbox Code Playgroud) 在/ etc/thin /我有几个yml文件.当我运行service thin stop -C /etc/thin/app.yml瘦身时停止所有应用程序,而不是仅我指定的应用程序.
如何瘦身才能停止/启动指定的应用程序?
更新:嗯,/etc/init.d/thin就是这样:$DAEMON restart --all $CONFIG_PATH.这解释了很多.有更聪明的init.d脚本吗?这是我的脚本:
https://gist.github.com/1003131
也可以看看:
我正在努力实现一个RESTful API,它应该返回JSON响应并且应该承受非常高的负载.最高负载将由API的"读取"部分生成,并且API的"写入"部分将产生非常小的负载.我的第一次尝试是使用nodejs编写整个API.我几乎做到了,但是在javascript和ruby之间面临着非常高的模型和逻辑重复,因为API是更大系统的一部分.我尝试将所有逻辑移动到后端(mySql),但这个想法变得更加丑陋.我的第二次尝试是在Ruby生态系统中编写API,以便在系统的所有部分之间共享模型/逻辑和测试.
我尝试单独使用Cramp和Goliath,但所有异步的东西都非常复杂的API实现.我只需要有2个读取URL异步,因为它们产生最高的负载,并且通过异步,我被迫以异步方式实现其余的API,这没有添加任何值.
我目前的尝试是混合:使用Thin/Sinatra/Cramp鸡尾酒.我正在Ruby代码中实例化瘦机架手柄并使用机架构建器我在正在实现同步实现的Sinatra和以异步方式实现2个URL的Cramp之间拆分API.
这是一个好方法吗?或者在一个Web服务器(Thin)中使用Sinatra和Cramp会因为某种原因让我更麻烦吗?
更新: 我正在尝试使用带有rack/fiber_pool和em_mysql2的唯一Sinatra解决方案.似乎我杀了两个目标 - 通过同步实现制作API异步.但我遇到了一个我认为很快就会修复的错误.
这样会有任何陷阱吗?
我想通过Rack提供静态文件以及动态内容.以前,我使用WEBrick 而不使用Rack,代码是这样的,它起作用了:
@s = WEBrick::HTTPServer.new(
Port: 3000,
BindAddress: "localhost",
Logger: WEBrick::Log.new(File::NULL),
AccessLog: [nil, nil]
)
%w[INT TERM].each{|signal| trap(signal){@s.shutdown}}
@s.mount("/", self)
@s.mount("/resource/", WEBrick::HTTPServlet::FileHandler, "/")
@s.start
Run Code Online (Sandbox Code Playgroud)
在上面,请求localhost:3000将由动态内容响应,请求localhost:3000/resource/path_to_file将由位于/path_to_file我的计算机上的静态文件响应.
现在,我想切换到使用Rack with Thin server的系统.我写了以下内容,但无法获取所提供的静态文件.应如何改变以使其有效?
Rack::Handler::Thin.run(->env{
h = Rack::Utils.parse_nested_query(env["QUERY_STRING"])
# I tried the following three lines one at a time, but neither worked.
use(Rack::Static, urls: "/resource/", root: "/") # First try
Rack::File.new("/resource").call(env) # Second try
Rack::Directory.new("/resource").call(env) # Third try
[200, {}, [some_dyamically_generated_content]]
}, Port: 3000)
Run Code Online (Sandbox Code Playgroud)
我知道这是一个类似的问题:如何通过Rack提供静态文件?,但我无法使它工作.我不知道如何使用Rack::Static …
我有一个在 Thin 上运行的非常基本的 ruby 示例,但我想知道如何将此示例转换为使用 Unicorn 或 Puma 作为 HTTP 服务器。这是我现在拥有的代码:
require 'rack'
class HelloWorld
def talk()
return "Hello World!"
end
end
class SomeServer
def start(server_object, port)
app = proc do |env|
[ 200, {"Content-Type" => "text/html"}, [server_object.talk()] ]
end
Rack::Handler::Thin::run(app, :Port => port)
end
end
SomeServer.new.start(HelloWorld.new, 3000)
Run Code Online (Sandbox Code Playgroud)
这运行得很好,但我不知道如何使用 Puma 或 Unicorn 让它运行。我为两者找到的大多数在线文档都是针对 Rails 应用程序的。如何通过这个简单的程序利用这些服务器的多线程功能?
我正在尝试部署生产Redmine应用程序.我听说瘦是rails webserver上最快的ruby,所以我安装了它.现在我有一个非常简单的问题:我必须在每次通过cmd重新启动机器时启动它,因为没有预先构建的Windows服务或类似的东西允许我自动启动它.我怎么能解决这个问题?我看到有一个bat文件,所以我试图制作这样的C#windows服务并且它正确启动但是如果我停止它,服务停止但是web服务器仍处于活动状态,它将永远不会关闭.停止瘦身的唯一方法是重启机器.也许我错了,有人可以发布一个如何运行瘦身作为Windows服务的例子吗?
我正在阅读Heroku Routing文章,并对以下内容感到困惑:
一次一个连接
heroku.com堆栈仅支持单线程请求.即使您的应用程序要分叉并支持一次处理多个请求,路由网格也不会一次为一个dyno提供多个请求.
后来在文章中......
多个同时连接
herokuapp.com路由堆栈可用于希望同时处理多个连接的异步或多线程应用程序.Ruby Web服务器,如Goliath,Thin(具有合适的Web框架,如Async Sinatra),或您自己的自定义EventMachine Web进程就是一些例子.Node.js Web应用程序(例如使用Express构建的那些)几乎总能在单个进程中处理多个连接,大多数Python,Java,Scala和Clojure应用程序也是如此.
那是哪一个呢?或者两位是在谈论不同的事情?(即请求和连接不同)
谢谢
我在我的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) 我试图在Amazon实例的Ubuntu上神奇地安装Image。
为此,我遵循了https://github.com/afeld/magickly上的参考。
在那里,我按照以下步骤在服务器上神奇地安装了Image。
$ gem install magickly
Run Code Online (Sandbox Code Playgroud)
之后,我在给定命令下使用安装了“瘦”宝石。
$ gem install thin
Run Code Online (Sandbox Code Playgroud)
然后,我尝试thin使用以下命令启动gem。
$ thin start
Run Code Online (Sandbox Code Playgroud)
但这给了我错误: No adapter found for /home/ubuntu
如何解决这个问题?
thin ×10
ruby ×6
sinatra ×3
asynchronous ×2
api ×1
bundler ×1
capistrano ×1
deployment ×1
file ×1
heroku ×1
nginx ×1
puma ×1
rack ×1
unicorn ×1
virtualhost ×1
windows ×1