有没有什么好办法在Windows机器上部署基于Ruby 1.9.3和Rails 3.2.6的Apache on Ruby on Rails应用程序? 我花了几个小时在论坛上search,但所有的post似乎都太旧了,以至于无法使用最新版本的Ruby和Rails。 Mongrel不再处于开发阶段,经常导致Rails崩溃,瘦只有基本的Windows支持,在我的计算机上导致Ruby运行时“以一种不寻常的方式终止自己”,Passenger是仅限于Linux的…我有点失落在此刻。
是否有任何稳定的,logging良好的解决scheme,用于在Windows上使用Apache构build最新框架的Rails应用程序?
UPDATE
我终于完成了自己的解决scheme。 请在下面查看有关Windows上Rails部署的最新指南。
更新:我刚刚回到我部署这个过程的公司。 在使用产品的11个月后,应用程序和服务器环境仍然完好无损地运行:)
好吧,看来我终于明白了。 请注意,我正在部署到公司内部网上的一小部分用户,所以我的解决方案可能不适用于所有人。 我正在使用优秀的Bitnami RubyStack ,它包含一个集成的Apache / Rails / MySQL安装。 从那里我做了以下(工作在Rails 3.2.6和Ruby 1.9.3):
关闭所有Apache和Rails(WEBrick / Thin / Mongrel / Unicorn)服务器。 如果您有任何开发版本,请退出您的网站。 清除您的浏览器缓存。
如果您尚未将数据库迁移到生产模式。 从RubyStack命令行,cd到您的应用程序目录,然后运行bundle exec rake db:migrate db:schema:load RAILS_ENV="production"
。 警告:db:schema:load会删除生产数据库中的所有数据。
预编译您的资产: bundle exec rake assets:precompile
。 请注意,这可能需要很长时间,具体取决于您的资产。
在你的httpd.conf
(对我来说,它是C:\ RubyStack-3.2.5-0 \ apache2 \ conf \ httpd.conf)
确保必要的模块没有被注释掉:
Loadmodulee expires_module modules/mod_expires.so Loadmodulee headers_module modules/mod_headers.so Loadmodulee proxy_module modules/mod_proxy.so Loadmodulee proxy_balancer_module modules/mod_proxy_balancer.so Loadmodulee proxy_http_module modules/mod_proxy_http.so Loadmodulee rewrite_module modules/mod_rewrite.so
然后将以下代码粘贴到文件的某个位置,其中app_name
是Rails应用程序的文件夹名称, *:82
是Apache正在侦听的任何端口号(由命令listn <port_number>
:
<VirtualHost *:82> # Your server's web or IP address goes here. # You can leave at localhost if deploying to # company intranet or some such thing. serverName localhost # Customize the next two lines with your app's public directory DocumentRoot "C:/RubyStack-3.2.5-0/projects/app_name/public" <Directory "C:/RubyStack-3.2.5-0/projects/app_name/public"> Allow from all Options -MultiViews </Directory> RewriteEngine On # Redirect all non-static requests to Rails server, # but serve static assets via Apache RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://app_balancers%{REQUEST_URI} [P,QSA,L] # Serves dynamic rails assets from multiple servers # to improve performance. A Rails server such as # thin or WEBrick must be running on at least one of # these ports in order for Apache to serve your site <Proxy balancer://app_balancers> BalancerMember http://localhost:3001/ BalancerMember http://localhost:3002/ </Proxy> # Support for far-futures expires header <LocationMatch "^/assets/.*$"> Header unset ETag FileETag None # RFC says only cache for 1 year ExpiresActive On ExpiresDefault "access plus 1 year" </LocationMatch> </VirtualHost>
为您的应用程序将要使用的每个Rails服务器创建一个Windows批处理文件(* .bat)。 确保在平衡器的端口上以生产模式运行它们。 例如,为您的第一台服务器:
@echo off cd D:\your_app_folder rails s -e production -p 3001
注意:接下来的几个步骤是必须的,因为Rails服务器需要作为服务来运行,否则如果没有用户登录到服务器,它们将被关闭。 这也使他们能够在失败时自动重启。 但是,Windows无法将批处理文件作为服务运行,因此我们必须将其转换为Windows EXE。 但是,标准Windows EXE不能用作服务,因为它们不响应OnStart和OnStop方法。 所以,为了最终让我们的服务器作为Windows服务运行,我们必须使用Non-Sucking服务管理器作为我们的Windows EXE的前端。
下载一个英美烟草公司的EXE转换器(只是一个谷歌),并从您的批处理文件的EXE。 确保你得到的转换器有一个选项,当它运行时隐藏命令窗口(该选项通常被称为“可见性”或类似的东西)。
下载非吸入服务管理器 (nssm.exe)。 把它放在永久的地方,并将该文件夹添加到您的路径。
启动命令提示符。 键入nssm install <servicename>
,其中<servicename>
是任何你想要你的服务被调用。 系统会提示您输入希望作为服务运行的应用程序的路径; 选择您在步骤7中创建的Windows EXE,然后单击安装,将命令行选项留空。
对平衡器中的所有端口重复步骤6-8,为每个Rails服务器创建一个不同的服务。
启动刚才创建的所有服务(开始菜单 – >管理工具 – >服务)。 服务应该立即开始,但是你必须给Rails服务器至少30秒来初始化。
启动Apache。 如果没有启动,请检查是否包含了所有必要的模块(列于第4步的第一部分)。
导航到localhost:82
,如果您定制了端口号码,则替换为82。 你应该看到你的网站和开发时一模一样。
请让我知道这是否太长,适合StackOverflow。 我花了相当多的时间来解决这个问题,并认为有人写了一个最新的Windows指南(如果有的话,我还没有看到它),是时候了。 祝好运,让我知道如果有人有这个问题或增强!
XAMPP可能会帮助你实现这个,体面的指导在这里: http : //www.andriets.com/development-en/ruby/ruby-xampp-en.html