首先说明,这篇文章肯定有不完整的地方,如果遇到错误,还需结合其他搭建成功的博客思考解决问题。如果有git,ruby知识会好很多,如果懂了heroku的运行原理更好。
(里面的分析,是我配置时所想,不一定准确)
Heroku:可以看作一个服务器,能够自动帮你配置程序,网站,支持ruby,php,nodejs等。官方提供了ruby的配置说明。如果使用你需要先注册,最好使用gmail账号。
与git的关系:git是一个版本管理工具,但是必须安装Heroku的Heroku Toolbelt,它里面自带了git,与heroku建立了某种关系,使得git push heroku可以直接把项目发到远程的heroku服务器的某个你建立项目的地方。(我很奇怪,git是怎么知道我的heroku项目的名字的,因为heroku可以建立多个项目)。
git发送项目的要求:git发送的东西必须能够让heroku知道这是个什么项目,如何安装,运行等。 当然有些可以通过 heroku run “your commond” 命令自行配置。
思路整理:heroku先创建项目,给你留个位置,git发送你的项目到那个地方,heroku根据配置文件,自动判断帮你运行。
以网站为例。首先写好程序(ROR,sinatra等网站都行【不过数据库我至今还没很好的使用】),然后写好Gemfile(可以让人知道你的项目需要安装那些gem,这样heroku就会自动帮你安装),用rack测试一下,成功后基本上可以push了。但是有时候本地可以,而进入Heroku就不行。
这是一个简单sinatra的例子,参照一个网址初识Sinatra系列可以制作一个较为复杂的网站(最后也告你怎么发布到heroku,但是我就是数据库那里不行) 。
建立文件夹 helloworld,cmd进入到这个目录,然后依次执行以下命令,#为我的说明
($ cd helloworld ***一定要在这个目录下面)
$ heroku create myhelloworld
#这个为了告诉大家项目名称和目录没有关系,如果不提供heroku会帮你生成一个。最后访问的网址为 http://myhelloworld.herokuapp.com
#当然这个有时需要你登录, heroku login 然后输入注册的邮箱,以及 heroku上的密码
#有时可能还要提示你生成公钥,如下
#ssh-keygen -t rsa #生成
#heroku keys:add #加入
#heroku keys #查看
#具体其他名字自行查阅
写一个简单的.rb文件命名为main,如下 #随意起,注意和后面统一
require 'sinatra'
require 'slim'
#$ gem install sinatra-contrib 这是下面那个require的gem名,要在gemfile中写好
#require 'sinatra/reloader'
#下面这个负责检测修改并重启。
#configure :development do
# register Sinatra::Reloader
# set :server, "webrick"
#end
get '/' do
"hello world"
end
创建一个config.ru
require 'bundler'
Bundler.require
require './main' # your ruby file
run Sinatra::Application
写好Gemfile,写什么到时候帮你装什么
source 'http://rubygems.org'
#source :rubygems
ruby "2.1.5"
gem "sinatra"
gem "sinatra-contrib"
gem "slim"
$ bundle install # 前提要 装好bundle 。它 帮你生成 Gemfile.lock。 如果改动了 gemfile 要删掉lock文件重新 bundle,好像也可以bundle update
$ rackup
#写好config.ru 然后运行 rackup检测一下你的网站,这里成功在heroku上才可能成功,网址为 http://localhost:9292/
可以写个 .gitignore 文件,里面写上你不想上传的文件
然后开始git,懂git命令可以轻易坚决遇到的疑惑和困难。
$ git init
$ heroku git:remote -a yourappname # 应该是指定将这个项目存储到heroku哪个仓库下。
$ git add . #注意有 点号
$ git commit -am "initial delployment"
#当然之后做了任意修改,删除,新增等,就需要自行用类似的git命令解决,因为heroku就是基于git的,这里完全和heroku无关,只用考虑git的使用。
$ git push -f heroku master #至于加不加 -f 这也是git的规则。 我是因为之前遇到了问题加了 -f 成功解决了。
这样就可以访问你的网战了 http://myhelloworld.herokuapp.com ,如果你不知道就运行如下命令,自动帮你打开浏览器及网页
$ heroku open
但是如果这里出现了application error,而你自己觉也没用什么高端的配置,还有一个命令要运行
$ heroku ps:scale web=1 # 这是解决了我问题的命令
如果需要另外的配置就运行
heroku run irb #这个就相当于登录heroku服务器你的项目的irb终端
#heroku run “【command】” 比如 bash等都可以运行,或是一个命令语句也行
有时可以这样加一些配置
$ heroku config:add key=value --app chjlx # *** 看好最后怎样指定你的app的
如果要取回git上的资源,比如有文件下载等,则运行类似的git命令 git clone [email protected]:chjlx.git
Unable to connect to Heroku API, please check internet connectivity and try again.
这个错误可能是因为链接不稳定造成,所以重新运行几次命令即可。
Unable to activate sinatra-contrib-1.4.2, because tilt-2.0.1 conflicts with tilt (~> 1.3)
http://qiita.com/histori/items/33c8b8e007854173b3b3 这个网站有详细说明,我是通过gem uninstall tilt 删掉了 2.0.1版本可以的
关于使用sqlite的错误,gemfile中大概写成如下
group :development, :test do
gem 'sqlite3', :platform => :ruby
end
group :production do
gem 'thin'
gem 'pg'
end
下面有一些可能用到的git命令:
git remote rm heroku
git remote add heroku [email protected]:yourappname.git
增加文件的git命令
git add .
git add --update .
git commit -am "add User.java"
git clone git://github.com/cloudhead/dorothy.git mytoto
关于gemfile
第一行的 source 很重要,现在国内封锁的紧,可以使用 https://ruby.taobao.org/ 。这样bundle的时候就可以自己帮你下载缺少的东西。
第二行的ruby版本指定也是很必要的,因为bundle是在你本地的电脑上运行的,应该会记录一些信息,以便于后面heroku安装。
一般运行时推荐 bundle exec ruby ... 这样他会尽可能根据GemFile指定的版本来运行,而不会选择其他版本,减少出错的可能。
require 'sinatra'
require 'sinatra/reloader'
require 'erb'
# gem install sinatra-reloader
configure :development do
register Sinatra::Reloader
set :server, "webrick"
end
set :public_folder,File.dirname(__FILE__)+"/playground"
set :views, File.dirname(__FILE__)+"/playground"
get '/' do
call env.merge("PATH_INFO" => '/tf')
end
get '/tf' do
erb :index
end
再来一个更加方便的运行静态网站的模板
也就是localhost:4567 然后就会出现选择列表,进去你想要的网站
# -*- coding:utf-8 -*
dir=File.expand_path("..",__FILE__);
Dir.chdir(dir)
require 'sinatra'
require 'sinatra/reloader'
require 'erb'
# gem install sinatra-reloader
configure :development do
register Sinatra::Reloader
set :server, "webrick"
set :bind, '0.0.0.0' # 再服务器上可能无法直接访问,所以要设置成这样 @2019-1-4
# http://sinatrarb.com/configuration.html
# set :port, 9494
end
usedir="/clmtrackr-dev/examples/"
set :public_folder,"E:/RmDownloads/RPGMV/NewData/"
set :views, "E:/RmDownloads/RPGMV/NewData/"
#set :public_folder,File.dirname(__FILE__)+usedir
#set :views, File.dirname(__FILE__)+usedir
links=["tf","clm","rpgvm"]
get '/' do
# call env.merge("PATH_INFO" => '/tf')
html=""
links.each do|e|
html+="- #{e}
"
end
html+="
"
erb html
end
get '/rpgvm' do
erb :index
end
get '/tf' do
erb :index
end
get '/clm' do
#erb "examples/example".to_sym
erb :example
end