Question

J'essaie d'utiliser le script de génération pour créer un contrôleur. Je lance la commande suivante:

> ruby script/generate controller Greeting

et le contrôleur semble être généré pas de problème. Ensuite, j'ajoute une méthode appelée index au GreetingController:

class GreetingController < ApplicationController
  def index
    render :text => "<h1>Welcome to your first Rails application<h1>"
  end
end

Je lance ensuite le serveur Web WEBrick et dirige mon navigateur sur http://127.0.0.1:3000/ message d'accueil , mais un message d'erreur s'affiche dans le navigateur:

We're sorry, but something went wrong.

We've been notified about this issue and we'll take a look at it shortly.

Cela devrait fonctionner, au moins selon le livre que je lis, Ruby on Rails de O'Reilly . Une idée de ce qui pourrait aller de travers? Le livre a été écrit il y a quelques années et j'utilise probablement une version plus récente, ou Rails. Des idées?

MISE À JOUR Voici le contenu de development.log:

/!\ FAILSAFE /!\  Sat Nov 28 22:11:12 -0500 2009
  Status: 500 Internal Server Error
  no such file to load -- mysql
    /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'

Pour info , j'ai créé l'application en appelant:

rails /home/myuser/www/mynewapp -d mysql
Était-ce utile?

La solution

Vous ne pouvez pas charger le pilote de base de données MySQL. Je suppose que ce n'est pas installé. Vous pouvez essayer ceci:

sudo gem install mysql

Je suppose cependant que vous n’avez probablement pas de base de données MySQL configurée. La plupart des gens utilisent sqlite3 pour le développement. Votre fichier config / database.yml devrait ressembler à:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

Si vous n'avez pas installé sqlite3, exécutez simplement

sudo gem install sqlite3-ruby

Ensuite, lancez vos migrations et vous devriez être tous ensemble

rake db:migrate

Mettre à jour J'ai posté ceci ici pour pouvoir utiliser un peu de formatage.

Dans le futur, appelez simplement:

rails /path/to/app

Cela fera que Rails utilisera la base de données par défaut qui est sqlite3. Vous pouvez ensuite modifier la base de données de production si / quand vous avez décidé de déployer.

Bonne chance.

Autres conseils

Rails suppose que vous utiliserez une base de données. Si vous ne lui donnez pas une chaîne de connexion valide dans database.yml, il s'étouffe dès la sortie de la porte. Cette hypothèse est valable car toute vraie application Web utilisera une base de données.

Toutefois, si vous essayez de modifier le fonctionnement des vues et des contrôleurs, vous pouvez désactiver complètement la fonctionnalité de base de données. Pour ce faire, ajoutez ceci à votre config / environment.rb:

config.frameworks -= [ :active_record ]

D'après la brève erreur que vous avez signalée, vous voudrez peut-être vérifier que la gem mysql est installée si vous envisagez d'utiliser mysql.

Si vous êtes sur Linux, essayez:

gem install mysql

Il essaie de charger le pilote MySQL. Avez-vous édité config / database.yml? Le mien ressemble à ceci:

# SQLite version 3.x
# gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

Passez également au développement Web agile avec Rails, troisième édition. C'est un bon tutoriel qui fonctionne encore principalement avec la dernière version de rails, même s'il est écrit pour la version 2.2.

  1. Consultez le journal dans votre / log annuaire. Il te donnera loin meilleure information d'erreur.
  2. Je suppose que vous obtenez une double erreur de rendu, car vous êtes appelant rendre explicitement, vous avez besoin mettre une déclaration de retour après votre rendre appel. - Par défaut, le le contrôleur essaie de rendre la vue qui correspond à votre contrôleur après la méthode du contrôleur se termine.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top