Déploiement de l'application Sinatra sur Dreamhost/Passenger avec des gemmes personnalisées
Question
J'ai une application Sinatra que j'essaie d'exécuter sur Dreamhost et qui utilise Pony pour envoyer des e-mails.Afin que l'application soit opérationnelle au tout début (avant d'ajouter pony), j'ai dû gem unpack rack
et gem unpack sinatra
dans le répertoire supplier/, voici donc mon config.ru :
require 'vendor/rack/lib/rack'
require 'vendor/sinatra/lib/sinatra'
set :run, false
set :environment, :production
set :views, "views"
require 'public/myapp.rb'
run Sinatra::Application
J'ai déjà fait gem install pony
et gem unpack pony
(dans le vendeur/).Ensuite, j'ai essayé d'ajouter require 'vendor/sinatra/lib/pony'
sur config.ru seulement pour que les passagers se plaignent des poneys dépendances (types MIME, tmail) introuvables non plus !
Là a être une meilleure façon d'utiliser d'autres pierres précieuses et d'atténuer ces longues, laides et redondantes requires
.Des pensées?
La solution
Je vous recommande de créer votre propre chemin de pierres précieuses « quelque part », puis l'ajouter dans votre config.ru
comme:
ENV['GEM_PATH'] = xxx
Gem.clear_paths
puis installez vos gemmes dans cette
Autres conseils
Installer des pierres précieuses Ruby on dreamhost
http://c.kat.pe/post/ Installation-rubis-gemmes-sur-dreamhost /
Modifier config.ru (œuvres pour Sinatra 1.0)
require 'rubygems'
require 'vendeur / sinatra / lib / sinatra.rb'
ENV['GEM_HOME'] = '/home/username/.gems'
ENV['GEM_PATH'] = '$GEM_HOME:/usr/lib/ruby/gems/1.8'
require 'rubygems'
Gem.clear_paths
disable :run, :reload
set :environment, :production
require 'yourapp'
run Sinatra::Application
Je espère que ça aide quelqu'un.
J'utilise poney et beaucoup d'autres pierres précieuses pour mon Sinatra. Il faut bien travailler pour vous aussi. Il est juste ces deux lignes (GEM_HOME et GEM_PATH) vous devez ajouter sur votre config.
Il m'a fallu du temps pour découvrir que vous pouvez simplement utiliser "gem install sinatra" et gem comprendra (car les répertoires système sont en lecture seule) que vous devrez utiliser un répertoire d'installation gem local.Pour l’instant, il ne semble pas nécessaire de définir un environnement spécial.Il consiste à utiliser $HOME/.gem comme chemin de gemme local et tout fonctionne.Pas besoin du tout d'exiger un «fournisseur/truc».J'ai découvert que je devais ajouter $HOME/.gem/ruby/1.8/bin à mon chemin afin d'exécuter les binaires installés par gems.
Voici mon config.ru (pour Dreamhost)
## Passenger should set RACK_ENV for Sinatra
require 'test'
set :environment, :development
run Sinatra::Application
Modification ultérieure :Tout cela est bien beau, mais il reste le problème que Le passager ne trouve pas mes joyaux lorsque le travail démarre initialement.
Mon config.ru est tout simple:
require 'rubygems'
require 'vendor/sinatra/lib/sinatra.rb'
require 'app.rb'
et la tête app.rb:
require 'yaml'
require 'haml'
require 'ostruct'
require 'date'
require 'pp'
module FlytoFB
log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)
configure do
enable :logging, :dump_errors
set :app_file, __FILE__
set :reload, true
set :root, File.dirname(__FILE__)
set :environment, :production
set :env, :production
set :run, false
set :raise_errors, true
set :public, 'public'
error do
e = request.env['sinatra.error']
puts e.to_s
puts e.backtrace.join("\n")
"Application Error!"
end
not_found do
"Page not found!"
end