我有这个程序,我设法上传到heroku没有错误。但是当我在浏览器中打开它时,如果我在那里使用Regexp,我会得到“内部服务器错误”。如果我发表评论就可以了。
我看过类似的关于Heroku的标题性问题,提出“内部服务器错误”,但它们并不涉及Regexp,并且他们没有给我任何关于我需要做些什么以使其工作的想法。例如Heroku deployment internal server error该人正在使用python,他安装的软件包是不兼容的,这似乎与我的问题无关。这个Heroku + Django Internal server Error一个人必须导入一个叫做djcelery的东西。好吧,也许我必须在某处导入某些东西,但我不知道是什么,但它不会是djcelery'因为我不使用django。
C:\rubytest\regexinheroku1>dir /b
aaa.rb
config.ru
Gemfile
Gemfile.lock
C:\rubytest\regexinheroku1>
这里是aaa.rb
C:\rubytest\regexinheroku1>type aaa.rb
require 'sinatra'
get '/' do
z=Regexp.new('.').match?('qwerty')
"aaaa"
end
这成功了
C:\rubytest\regexinheroku1>git push heroku master
.... deployed to Heroku
这是问题
如果我转到该网址,则显示“内部服务器错误”
但是,如果我通过注释掉正则表达式行来改变aaa.rb
C:\rubytest\regexinheroku1>type aaa.rb
require 'sinatra'
get '/' do
# z=Regexp.new('.').match?('qwerty')
"aaaa"
end
然后它工作正常,页面出现并按预期说“aaaa”。
如果你想重现这个并且以上是不够的,这里是所有步骤
So you see the files
C:\rubytest\regexinheroku2>dir /b
aaa.rb
config.ru
Gemfile
The contents of each file
C:\rubytest\regexinheroku2>type aaa.rb
require 'sinatra'
get '/' do
z=Regexp.new('.').match?('qwerty') # if I uncomment this, I get internal server error
"aaaa"
end
C:\rubytest\regexinheroku2>type config.ru
require './aaa'
run Sinatra::Application
C:\rubytest\regexinheroku2>
C:\rubytest\regexinheroku2>type Gemfile
source "http://rubygems.org/"
gem 'sinatra'
gem "haml"
And see the commands I run to get the application successfully deployed
C:\rubytest\regexinheroku2>bundle install
...
C:\rubytest\regexinheroku2>git init
Initialized empty Git repository in C:/rubytest/regexinheroku2/.git/
C:\rubytest\regexinheroku2>git add -A
warning: LF will be replaced by CRLF in Gemfile.lock.
The file will have its original line endings in your working directory.
C:\rubytest\regexinheroku2>git commit -m "sddsfsdfsd"
[master (root-commit) 12cf382] sddsfsdfsd
warning: LF will be replaced by CRLF in Gemfile.lock.
The file will have its original line endings in your working directory.
4 files changed, 39 insertions(+)
create mode 100644 Gemfile
create mode 100644 Gemfile.lock
create mode 100644 aaa.rb
create mode 100644 config.ru
C:\rubytest\regexinheroku2>heroku create
path1 gitmisc done
Creating app... done, abc
https://abc.herokuapp.com/ | ....
C:\rubytest\regexinheroku2>git push heroku master
....
remote: Verifying deploy... done.
To https://git.heroku.com/abc.git
* [new branch] master -> master
C:\rubytest\regexinheroku2>
答案 0 :(得分:2)
与所有错误一样,首先要做的是检查日志。日志应该(几乎)总是提供比错误的更好的线索,而不是通用的内部服务器错误"这是面向公众的。
但是,在这种情况下,我几乎可以肯定问题是您的本地计算机正在使用 ruby版本>= 2.4.0
(可能是2.5.1
,这是最新的?),而heroku正在运行 ruby版本2.3.7
。来自the documentation:
如果您的
Gemfile
不包含ruby条目,则会在MRI 2.3.7
和Cedar-14
堆栈上获得Heroku-16
。在Heroku-18
,您将获得MRI 2.4.4
。
要解决此问题,我建议包括:
ruby '2.5.1'
{p>(或您正在使用的任何版本)Gemfile
。这是一般的好习惯,因为它可以确保您的本地和生产环境相同。
具体来说,这里的实际问题是Ruby 2.4.0
added the method Regexp#match?
。所以Heroku目前正在抛出一种未知的方法"错误。