Dans mon application Rails, j'essaie de créer un formulaire permettant aux utilisateurs de créer un signet.Can Rails/Mongrel accepte un formulaire POST avec un champ texte dont la valeur est une URL
<% form_tag(contents_path) do %>
<input name='item_type' value="Bookmark" type="hidden" /></p>
<h3>Create New Bookmark</h3>
<p>Title:<input name='item[title]' type="text" /></p>
<p>URL:<input name='item[url]' type="text" /></p>
<%= submit_tag 'Create' %>
<% end %>
Edit: Pour plus de clarté, voici le code HTML réel généré par le modèle ci-dessus:
<form action="/contents" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="cc709c404365f1a5754a7bf0c3fe79ce9ec9f96b" /></div>
<input name='item_type' value="Bookmark" type="hidden" /></p>
<h3>Create New Bookmark</h3>
<p>Title:<input name='item[title]' type="text" /></p>
<p>URL:<input name='item[url]' type="text" /></p>
<input name="commit" type="submit" value="Create" />
</form>
Comme vous pouvez le voir est une forme tout à fait normal.
Il fonctionne très bien, sauf si une URL réelle est entré, dans ce cas, le serveur ne répond jamais et je reçois un message dans mon fichier mongrel.log
Error reading HTTP body: #<RuntimeError: Socket read return nil>
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/http_request.rb:105:in `read_socket'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/http_request.rb:77:in `read_body'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/http_request.rb:55:in `initialize'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:149:in `new'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:149:in `process_client'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `initialize'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `new'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:268:in `initialize'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:268:in `new'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:268:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/configurator.rb:282:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/configurator.rb:281:in `each'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/configurator.rb:281:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:128:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/command.rb:212:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:281
/usr/bin/mongrel_rails:16:in `load'
/usr/bin/mongrel_rails:16
Comme on le voit la demande atteint jamais mon code de contrôleur.
J'ai depuis découvert que l'envoi de n'importe quelle forme où une valeur de champ commence par la chaîne "http: /" provoque le problème. mettre d'autres caractères ou des espaces blancs avant de résoudre le problème. J'ai également essayé ceci dans d'autres applications de Rails (sur le même serveur) avec le même résultat.
Il est donc possible de contourner le problème en insérant un espace supplémentaire au début de la chaîne et en l'effaçant sur le serveur.
Mais je préférerais une solution côté serveur uniquement si cela est possible. J'espère que c'est simplement une mauvaise configuration sur le serveur. Je suis sous Rails 2.1.0 sur un arrangement d'hébergement partagé basé sur CPanel. Pourquoi pas un form_for au lieu de form_tag?
Ce comportement n'est pas attendu et n'est pas conforme à mon expérience. Nous aurons besoin de voir tout le code associé à l'action, et de savoir quelle version de Rails vous utilisez. – womble
J'ai changé mon Q pour afficher la trace complète de la pile, comme vous pouvez le voir, elle ne parvient pas à mon code. J'ai juste essayé d'entrer "http: //" dans quelques formes aléatoires dans certaines de mes autres applications de rails fonctionnant sur le même serveur et j'ai eu le même problème. donc ce n'est pas spécifique à cette forme/action. –