2009-12-02 25 views
3

J'ai une application Sinatra que j'essaie d'utiliser sur Dreamhost et qui utilise pony pour envoyer des emails. Afin d'obtenir la mise en application et en cours d'exécution au début (avant d'ajouter poney), je devais gem unpack rack et gem unpack sinatra dans le vendor /, donc ce fut mon config.ru:Déploiement de l'application Sinatra sur Dreamhost/Passenger avec des gemmes personnalisées

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 

Je l'ai déjà fait gem install pony et gem unpack pony (dans le fournisseur /). Par la suite, j'ai essayé d'ajouter require 'vendor/sinatra/lib/pony' à config.ru seulement pour que Passenger se plaigne des dépendances de pony (mime-types, tmail) n'étant pas trouvé non plus!

Il a pour être un meilleur moyen d'utiliser d'autres gemmes et atténuer ces longues, laides, redondantes requires. Des pensées?

Répondre

4

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 pierres précieuses dans ce

+0

Oui! En utilisant cette info je suis allé et j'ai trouvé http://www.edschmalzle.com/2009/06/29/deploying-sinatra-with-passenger-on-dreamhost/ et je l'ai fait fonctionner. Merci! – darkism

0

Mon config.ru est tout simple :

require 'rubygems' 
require 'vendor/sinatra/lib/sinatra.rb' 
require 'app.rb' 

et 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 
1

Il m'a fallu du temps pour trouver que vous pouvez simplement utiliser "gem install sinatra" et gem va comprendre (parce que les répertoires du système sont en lecture seule) que vous aurez besoin d'utiliser un répertoire local d'installation gem. Pour le moment, il ne semble pas nécessaire de définir un environnement spécial. Il s'agit d'utiliser $ HOME/.gem comme chemin de gem local et tout fonctionne. Pas besoin d'exiger 'vendeur/trucs' du tout. J'ai trouvé 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 

modifier plus tard: Tout cela est bien beau, mais il reste la question qui Passenger can't find my gems when the job initially starts up.

3

Ruby on installer des gems dreamhost

http://c.kat.pe/post/installing-ruby-gems-on-dreamhost/

changement config.ru (fonctionne 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 

Hope it helps s quelqu'un. J'utilise poney et beaucoup d'autres gemmes pour mon Sinatra. Cela devrait bien fonctionner pour vous aussi. C'est juste ces deux lignes (GEM_HOME et GEM_PATH) que vous devez ajouter sur votre config.