我正在尝试将一个简单的应用程序部署到包含“Ruby 1.9”和“PostgreSQL 9.2”包的设备上。部署似乎成功。当我将浏览器指向服务器时,我得到一个乘客“Ruby(Rack)应用程序无法启动”,并显示错误消息“Could not find rake-0.9.6 in any sources (Bundler::GemNotFound)”。SSH 和“gem install”没有帮助(gem 已安装,但没有安装在 Passenger 可以找到的位置 - 我无法将其移动到 Passenger 想要的位置,因为我没有 root 权限)。根据Root 权限在 Openshift 上安装 ruby gems,gem 需要在我的 Gemfile.lock 中指定。我这样做了,但没有帮助。这是我的 config.ru:
require 'rubygems'
require 'bundler'
$LOAD_PATH << './lib'
ENV['DATABASE_URL'] = "#{ENV['OPENSHIFT_POSTGRESQL_DB_URL']}/phone_book"
Bundler.require
require 'phone_book/controllers'
Ramaze.start(:root => Ramaze.options.roots, :started => true)
run Ramaze
这是我的 Bundle.lock:
GEM
remote: https://anybody:password@some.gem.server.com/
remote: https://rubygems.org/
specs:
daemons (1.1.9)
eventmachine (1.0.3)
haml (4.0.4)
tilt
haml-contrib (1.0.0.1)
haml (>= 3.2.0.alpha.13)
innate (2012.03)
rack (~> 1.4.1)
mysql2 (0.3.15)
pg (0.17.1)
phone_book (0.0.0)
haml (= 4.0.4)
haml-contrib (~> 1.0.0)
innate (= 2012.03)
mysql2 (~> 0.3)
pg (~> 0.17)
rack (= 1.4.5)
rake (= 0.9.6)
ramaze (= 2012.04.14)
sass (~> 3.3)
sequel (~> 4.8)
sqlite3 (~> 1.3.9)
thin (~> 1.2)
rack (1.4.5)
rake (0.9.6)
ramaze (2012.04.14)
innate (>= 2012.03)
sass (3.3.0)
rake
sequel (4.8.0)
sqlite3 (1.3.9)
thin (1.6.2)
daemons (>= 1.0.9)
eventmachine (>= 1.0.0)
rack (>= 1.0.0)
tilt (2.0.0)
PLATFORMS
ruby
DEPENDENCIES
phone_book (~> 0.0)
当我通过“rackup”在我的笔记本电脑上启动它时,这个例子运行良好。我也可以将它部署到 Dokku 中。该代码没有明确引用 Thin(这是我想使用的,但我不介意乘客)。
我还尝试使用“高级 Ruby 墨盒”,并指定 Thin(“rhc env set OPENSHIFT_RUBY_SERVER=thin -a app_name”)。这一次,推送导致“CLIENT_ERROR: Failed to execute: 'control build'”,对“--trace”提出无益的建议(“gem push”不接受)。“gear postreceive --trace”的 ssh 执行似乎挂起(在 OS X 上),直到我按下一个键,然后我得到一个客户端堆栈跟踪。当我从控制台重新启动应用程序时,我得到“无法完成请求的操作”和“[31mbundler: command not found: thin start -C ...”。这很奇怪,似乎 Thin 打算包含在此墨盒中。无论如何,我确实在 Gemfile.lock 中指定了它(见上文),