利用heroku搭建ruby网站项目

1.前言

首先说明,这篇文章肯定有不完整的地方,如果遇到错误,还需结合其他搭建成功的博客思考解决问题。如果有git,ruby知识会好很多,如果懂了heroku的运行原理更好。

2.大体分析 

(里面的分析,是我配置时所想,不一定准确)

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根据配置文件,自动判断帮你运行。

 

3.关于发布ruby的简单说明

以网站为例。首先写好程序(ROR,sinatra等网站都行【不过数据库我至今还没很好的使用】),然后写好Gemfile(可以让人知道你的项目需要安装那些gem,这样heroku就会自动帮你安装),用rack测试一下,成功后基本上可以push了。但是有时候本地可以,而进入Heroku就不行。

 

4.具体的例子

这是一个简单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

 

 

5.遇到的问题及解决办法

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

 

 

6. 附加说明

下面有一些可能用到的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指定的版本来运行,而不会选择其他版本,减少出错的可能。

 

 

7. 一个sinatra的模板

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+="
  1. #{e}
  2. " 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

 

 

 

 

 

 

 

 

你可能感兴趣的:(ruby)