我正在尝试从 HTML (haml) 制作的表单发送电子邮件。我创建了一个名为 mailto.rb 的脚本,并将其设置为表单内的操作。问题是,当我按下提交时,它只是下载文件(mailto.rb),而不是运行里面的代码。
%form{:action => "mailto.rb", :method => "post"}
这是表单开头的代码。 在 HTML 中,它是:
<form method="post" action="mailto.rb">
此外,我还在 ruby 文件的第一行添加了 ruby 可执行文件的路径。
#!~/.rbenv/shims/ruby
我知道使用rails会更容易,但我不被允许。我必须使用 ruby 脚本。
PS:我正在使用 Middleman,并且在本地主机上工作。
最佳答案
这个想法是你不能通过中间人 POST 请求静态文件。如果您中间人构建
您的应用程序并将所有内容传递给 nginx/apache2,情况也是如此。您将获得 405 error
例如,要将脚本与 nginx 一起使用,您必须安装并使用 spawn-fcgi
和 fcgiwrap
。从 ruby 文件生成套接字或端口,并将 nginx 配置为 fastcgi_pass
到 fcgiwrap 套接字。
要将其与 apache2 一起使用,请将您的站点添加到 /var/www/html
并将其放入虚拟主机中:
AddHandler cgi-script .rb
<Directory /var/www/html>
Options +ExecCGI
</Directory>
符号链接(symbolic link) cgid.conf
和 cgid.load
到启用 mods 的文件夹并重新启动 apache2。
检查错误日志是否有其他问题,但它应该可以工作。
编辑:在这种情况下,我将选择 apache2 而不是 nginx。作为第三种解决方案,您应该考虑编写一个rack脚本并将其传递给unicorn。
关于html - 表单操作下载 ruby 脚本而不是运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266603/