将Sinatra应用部署到Passenger 4.0.0.Rc6 by vlad.在生产服务器上,它一直要求Gemfil



在生产服务器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:updatevlad: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

最新更新