在过去的几个小时里,我一直试图让 Ruby on Rails 在 Windows 服务器上运行,但没有成功。
一开始我尝试通过 IIS7 的 FastCGI 支持配置一个测试应用程序,但是这方面的文档不是很好。我一直在关注这个博客条目,这个,这个,这个,但是一切似乎都缺少主要步骤,或者已经过时了。并且每篇文章都不断从不存在的rubyonrails.org链接回此 Howto。
我得到的感觉是,即使我设法使这项工作成功,IIS 的 FastCGI 还是不够好,无法在生产环境中使用。
所以看起来我最好的选择是在 IIS 中设置一个反向代理,它使用ARR和 UrlRewrite指向 Apache & Mongrel/Passenger 。有没有其他人坚持在 Windows 堆栈上部署 Rails 应用程序?我在正确的轨道上吗?你能告诉我如何配置这个更好的主意吗?
我相信 Plesk 已经安装了一个使用不同端口在该服务器上运行的 Apache/Tomcat 实例,因此添加另一个虚拟主机应该不难;最难的部分似乎是通过 IIS 设置反向代理。
附录
自从发布这篇文章以来,我继续构建了一个运行 Linux 的虚拟服务器,并使用 Apache、Passenger和Ruby Enterprise Edition为我们的 Rails 产品提供服务。
Linux 是一个如此简单、便宜和可靠的选择,试图将 Rails 的方钉塞进 Windows/IIS 的圆孔中是一个傻瓜的差事。
唯一可能的例外是您的 Windows 环境。支持Java,可以使用JRuby。从各方面来看,它是更好的 Ruby 实现之一。否则,放弃并保存您的理智。
我正在考虑租用 384 MB 内存的 VPS。它将在 CentOS 上运行,并拥有带有 Apache 2 / MySQL 的 cPanel 和带有 nginx / sqlite 的 Phusion Passenger。
你觉得它有足够的内存吗?它将为大约 10 个小流量 PHP/MySQL 网站和 3-4 个小流量 Ruby on Rails 应用程序提供服务。
感谢您的建议。
好的:我已经建立了一个站点,其中包含一些我们向开发人员公开的 API,它们采用以下格式
/api/item.xml?type_ids=34,35,37®ion_ids=1000002,1000003&key=SOMERANDOMALPHANUM
Run Code Online (Sandbox Code Playgroud)
在这个 URI 中,type_ids 总是被设置,region_ids 和 key 是可选的。
需要注意的重要一点是,关键变量不会影响响应的内容。它用于请求的内部跟踪,因此我们可以识别发出缓慢或其他不需要的请求的人。
在 Varnish 中,我们有一个像这样的 VCL:
if (req.http.host ~ "the-site-in-question.com") {
if (req.url ~ "^/api/.+\.xml") {
unset req.http.cookie;
}
}
Run Code Online (Sandbox Code Playgroud)
我们只是去除 cookie 并让后端完成其余的工作(就时间而言,这是一种 hackaround,因为 Rails/authlogic 发送带有 API 响应的会话 cookie)。
但目前,任何不同的开发人员基本上都在访问不同的缓存,因为它们&key=SOMEALPHANUM被视为 Varnish 哈希存储的一部分。这显然不是一个很好的解决方案,我正在尝试找出如何告诉 Varnish 忽略 URI 的那部分。
我有一个在权限后带有 @ 的文件
-rwxr-xr-x@ 1 riccardotacconi staff 215 14 Sep 14:21 Capfile
Run Code Online (Sandbox Code Playgroud)
你知道它的含义吗。
我正在使用 Capistrano 部署 Rails 应用程序。该 Gemfile 不是副本,尽管它已在 SVN 存储库中提交。很奇怪。
我正在尝试在 TeamCity 中运行构建。我正在尝试为单元测试构建的应用程序是用 Ruby on Rails 编码的。
在克隆构建失败后,我将 VCS 根配置为从我的存储库获取。这里是:
Bundler::GemNotFound: Could not find gem 'devise (= 2.1.0) ruby' in the gems available on this machine.
Stacktrace:
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:287:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:346:in `block in resolve_requirement'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:344:in `catch'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:344:in `resolve_requirement'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:295:in `block in resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:294:in `reverse_each'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:294:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:161:in `start'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:128:in `block in resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:127:in `catch'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:127:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:192:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:127:in `specs'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:172:in `specs_for'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:161:in `requested_specs'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/environment.rb:23:in `requested_specs'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:11:in `setup'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler.rb:107:in `setup'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/setup.rb:17:in `<top (required)>'
/usr/local/rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
/usr/local/rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
/usr/local/rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' …Run Code Online (Sandbox Code Playgroud) 我需要一些来自 libpq-dev 中包含的 postgres 9 开发版本的头文件,用于安装pggem,但是当我执行时:
须藤 apt-get 安装 libpq-dev
我得到结果:
以下软件包具有未满足的依赖项: libpq-dev : Depends: libpq5 (= 8.4.7-0ubuntu0.10.10) 但要安装 9.0.1-1~lucid
当我尝试删除libpq5(正确重新安装它?)时,它威胁要删除 postgresql-9.0:
以下软件包将被删除: libpq5 pgadmin3 php5-pgsql postgresql-9.0 postgresql-client-9.0
有谁知道如何解决这个问题?谢谢。
Elastic Beanstalk 内置了对 RDS 的支持。但是,我想将 Postgresql 与 Elastic Beanstalk 一起使用。哪种方法是最好的方法?
我继承了一个旧的 rails 应用程序,我最近将其批发转移到了 AWS。基础设施的一部分是一个雪貂索引,它存在于每晚构建订阅者电子邮件的十个后端应用程序服务器上。我们有一个大型数据库,所以每个后端服务器每天重建索引大约需要四个小时。在 10 个应用服务器中,这需要很多额外的时间来保持其中大部分在否则会停止运行时继续运行。(总而言之,每组索引每台服务器大约 8GB)。
所有重建的雪貂指数都从主数据库读取相同的数据。我想知道的是 - 我可以让一个应用程序服务器进行每日重建,然后将最终重建的索引 rsync 到其他应用程序服务器吗?我对雪貂(或就此而言的导轨)了解得不够多,无法知道这里可能存在什么样的依赖关系。我认为索引就是索引,因此将完全相同的数据复制到所有服务器应该是“无争议的”。我是在杂草中还是在正确的轨道上?
我正在尝试使用 NGINX 1.4.7 版和 Phusion Passenger 4.0.41 在我的 ubuntu 服务器上设置 https。
我使用这两个命令创建了 .key 和 .csr
sudo openssl genrsa -des3 -out server.key 2048
sudo openssl req -new -key server.key -out server.csr
Run Code Online (Sandbox Code Playgroud)
并将 .csr 发送到 sslshopper.com 伙计们
得到3个文件:
Root CA Certificate - AddTrustExternalCARoot.crt
Intermediate CA Certificate - USERTrustSecureServerCA.crt
Your COMODO SSL Certificate - subdomain_domain_com.crt
Run Code Online (Sandbox Code Playgroud)
这就是我的 nginx.conf 现在的样子
http {
passenger_root /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.1/wrappers/ruby;
server_names_hash_bucket_size 64;
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server { …Run Code Online (Sandbox Code Playgroud) 我在 AWS 负载均衡器后面设置了 5 个 t1.micro EC2。
一旦连接到 LB,所有实例都会变慢。即使我直接向实例发出请求(绕过 LB),10 个请求中有 8 个需要超过 30 秒。实例的 CPU 负载似乎不是问题。当我从 LB 中删除其中一个实例时,它的响应很好。一旦它被添加回 LB,请求就会再次变慢。
任何人都可以给我一些线索,说明为什么一旦 LB 连接起来,实例的响应速度就会慢得多?
提前致谢
ruby-on-rails amazon-ec2 amazon-web-services unicorn amazon-elb
ruby-on-rails ×10
apache-2.2 ×2
nginx ×2
amazon-ec2 ×1
amazon-elb ×1
cache ×1
capistrano ×1
http ×1
https ×1
iis-7 ×1
linux ×1
mac-osx ×1
memory ×1
postgresql ×1
ssl ×1
svn ×1
teamcity ×1
ubuntu ×1
unicorn ×1
varnish ×1
vps ×1