如何将此 Ruby/Sinatra 应用程序部署到 Heroku?
How can I deploy this Ruby/Sinatra app to Heroku?
我正在尝试 首先 Ruby/Sinatra 部署(耶!),一个 "to do list" app 网站到 Heroku。代码在 Windows 和 Ubuntu 环境中运行良好
但实际上我在成功部署时遇到了问题。
我尝试遵循 this tutorial using my own code. When I execute sudo git push heroku master
, I'm told the app is deployed to Heroku, but when I go to the URL it gives, it's not running. I might need help with my (one-line) Procfile. Also, a "warning" (does that mean deployment didn't happen?) says I didn't declare my Ruby version. I tried using rvm 2.2.5
and putting gem 'ruby', '2.2.5'
in my Gemfile,但如果我声明 Ruby 版本,则捆绑程序不会安装(它说我没有安装 Ruby 的那个版本,这我似乎确实如此)。
sudo git push heroku master
Counting objects: 5, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 419 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 1 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rack
remote: -----> Using Ruby version: ruby-2.2.6
remote: -----> Installing dependencies using bundler 1.13.6
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote: Warning: the running version of Bundler (1.13.6) is older than the version that created the lockfile (1.13.7). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Fetching gem metadata from https://rubygems.org/.........
remote: Fetching version metadata from https://rubygems.org/.
remote: Using diff-lcs 1.2.5
remote: Using rack 1.6.5
remote: Using rspec-support 3.5.0
remote: Using ruby 0.1.0
remote: Using tilt 2.0.5
remote: Using bundler 1.13.6
remote: Using rspec-core 3.5.4
remote: Using rspec-expectations 3.5.0
remote: Using rspec-mocks 3.5.0
remote: Using rack-protection 1.5.3
remote: Using sinatra 1.4.7
remote: Bundle complete! 7 Gemfile dependencies, 11 gems now installed.
remote: Gems in the groups development and test were not installed.
remote: Bundled gems are installed into ./vendor/bundle.
remote: Bundle completed (1.79s)
remote: Cleaning up the bundler cache.
remote: Warning: the running version of Bundler (1.13.6) is older than the version that created the lockfile (1.13.7). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Removing dbm (0.5)
remote: -----> Detecting rake tasks
remote:
remote: ###### WARNING:
remote: You have not declared a Ruby version in your Gemfile.
remote: To set your Ruby version add this line to your Gemfile:
remote: ruby '2.2.6'
remote: # See https://devcenter.heroku.com/articles/ruby-versions for more information.
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote: Default types for buildpack -> console, rake
remote:
remote: -----> Compressing...
remote: Done: 17.3M
remote: -----> Launching...
remote: Released v5
remote: https://gentle-sea-73583.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/gentle-sea-73583.git
995b763..014acd8 master -> master
我也尝试执行 sudo heroku run ruby todo.rb
(todo.rb
是我的服务器应用程序),我得到了这个:
sudo heroku run ruby todo.rb
Running ruby todo.rb on ⬢ gentle-sea-73583... up, run.3103 (Free)
/app/vendor/ruby-2.2.6/lib/ruby/2.2.0/yaml/dbm.rb:2:in `require': cannot load such file -- dbm (LoadError)
from /app/vendor/ruby-2.2.6/lib/ruby/2.2.0/yaml/dbm.rb:2:in `<top (required)>'
from /app/lib/task_store.rb:2:in `require'
from /app/lib/task_store.rb:2:in `<top (required)>'
from todo.rb:7:in `require'
from todo.rb:7:in `<main>'
也许我需要以某种方式在 Heroku 上设置 YAML?我不知道怎么...
从您的 Gemfile 中删除 gem 'dbm'
。
dbm gem 仅适用于 jruby,您不需要它,因为您使用的是 yaml/dbm。
我正在尝试 首先 Ruby/Sinatra 部署(耶!),一个 "to do list" app 网站到 Heroku。代码在 Windows 和 Ubuntu 环境中运行良好
但实际上我在成功部署时遇到了问题。
我尝试遵循 this tutorial using my own code. When I execute sudo git push heroku master
, I'm told the app is deployed to Heroku, but when I go to the URL it gives, it's not running. I might need help with my (one-line) Procfile. Also, a "warning" (does that mean deployment didn't happen?) says I didn't declare my Ruby version. I tried using rvm 2.2.5
and putting gem 'ruby', '2.2.5'
in my Gemfile,但如果我声明 Ruby 版本,则捆绑程序不会安装(它说我没有安装 Ruby 的那个版本,这我似乎确实如此)。
sudo git push heroku master
Counting objects: 5, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 419 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 1 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rack
remote: -----> Using Ruby version: ruby-2.2.6
remote: -----> Installing dependencies using bundler 1.13.6
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote: Warning: the running version of Bundler (1.13.6) is older than the version that created the lockfile (1.13.7). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Fetching gem metadata from https://rubygems.org/.........
remote: Fetching version metadata from https://rubygems.org/.
remote: Using diff-lcs 1.2.5
remote: Using rack 1.6.5
remote: Using rspec-support 3.5.0
remote: Using ruby 0.1.0
remote: Using tilt 2.0.5
remote: Using bundler 1.13.6
remote: Using rspec-core 3.5.4
remote: Using rspec-expectations 3.5.0
remote: Using rspec-mocks 3.5.0
remote: Using rack-protection 1.5.3
remote: Using sinatra 1.4.7
remote: Bundle complete! 7 Gemfile dependencies, 11 gems now installed.
remote: Gems in the groups development and test were not installed.
remote: Bundled gems are installed into ./vendor/bundle.
remote: Bundle completed (1.79s)
remote: Cleaning up the bundler cache.
remote: Warning: the running version of Bundler (1.13.6) is older than the version that created the lockfile (1.13.7). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Removing dbm (0.5)
remote: -----> Detecting rake tasks
remote:
remote: ###### WARNING:
remote: You have not declared a Ruby version in your Gemfile.
remote: To set your Ruby version add this line to your Gemfile:
remote: ruby '2.2.6'
remote: # See https://devcenter.heroku.com/articles/ruby-versions for more information.
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote: Default types for buildpack -> console, rake
remote:
remote: -----> Compressing...
remote: Done: 17.3M
remote: -----> Launching...
remote: Released v5
remote: https://gentle-sea-73583.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/gentle-sea-73583.git
995b763..014acd8 master -> master
我也尝试执行 sudo heroku run ruby todo.rb
(todo.rb
是我的服务器应用程序),我得到了这个:
sudo heroku run ruby todo.rb
Running ruby todo.rb on ⬢ gentle-sea-73583... up, run.3103 (Free)
/app/vendor/ruby-2.2.6/lib/ruby/2.2.0/yaml/dbm.rb:2:in `require': cannot load such file -- dbm (LoadError)
from /app/vendor/ruby-2.2.6/lib/ruby/2.2.0/yaml/dbm.rb:2:in `<top (required)>'
from /app/lib/task_store.rb:2:in `require'
from /app/lib/task_store.rb:2:in `<top (required)>'
from todo.rb:7:in `require'
from todo.rb:7:in `<main>'
也许我需要以某种方式在 Heroku 上设置 YAML?我不知道怎么...
从您的 Gemfile 中删除 gem 'dbm'
。
dbm gem 仅适用于 jruby,您不需要它,因为您使用的是 yaml/dbm。