在生产服务器Passenger(4.0.0. x)上。rc6 + nginx)一直要求Gemfile
中的:development
组。从Gemfile
中手动注释它们后,应用程序运行良好。否则,Passenger就会因为缺少宝石而无法启动应用程序。
我检查了错误页面,似乎乘客正在生产模式下运行:
Environment (value of RAILS_ENV, RACK_ENV, WSGI_ENV and PASSENGER_ENV)
production
下面是我的简单应用程序的来源,我错过了任何设置有乘客的工作吗?谢谢。
这是我的app.rb
,一个简单的sinatra应用。
require 'rubygems'
require 'sinatra'
get "/" do
"Hello!"
end
我通过vlad将其部署到生产服务器。这是config/deploy.rb
require 'bundler/vlad'
set :application, "sinatratest"
set :domain, "server domain"
set :deploy_to, "path/on/server"
set :repository, "mygithub branch"
和我的config.ru
require 'rubygems'
require 'sinatra'
require './app'
run Sinatra::Application
和Gemfile
source 'https://rubygems.org'
gem 'sinatra'
group :development do
gem 'vlad', require: false
gem 'vlad-git', require: false
end
回答我自己的问题:
请参阅Bundler手册中的vlad部分,require 'bundler/vlad'
并创建一个同时运行vlad:update
和vlad:bundle:install
的新任务,或者将vlad:bundle:install
插入到原始的vlad:update
命令中。
如果服务器使用RVM,那么它需要通过vlad任务中的source ~/.rvm/scripts/rvm
或使用vlad-extra
gem显式设置bundle
的路径,参见此文章。
我正在做什么使它工作:
In config/deploy.rb
:
require 'bundler/vlad'
set :bundle_cmd, "source $HOME/.rvm/scripts/rvm && bundle"
In Rakefile
:
namespace :vlad do
desc "Run vlad:update and vlad:bundle:install"
task :deploy => %w[vlad:update vlad:bundle:install]
end
在本地机器上运行rake vlad:deploy
,它工作
我认为问题是
需要rubygems的
根据我的理解,这意味着需要Gemfile中的所有gem。只需要Productiv宝石:
require 'rubygems'
require 'bundler/setup'
来源:http://gembundler.com/v1.3/rationale.html