Rails 【今晚不翻车 20 点不见不散】如何不用框架用 Ruby 写 Web APP?

rocLv · April 20, 2022 · Last by Rei replied at April 30, 2022 · 1182 hits

前天做了一次分享,展示的很好,结果半路翻了一下车。。。

分享结束后,我又运行了一下代码,没毛病。。。好吧,暂且归为环境的问题

今晚 20 点准备给大家做第二次分享,《Ruby on Rails 源码框架导读》

我们首先不用任何框架,直接用 Rackerubisqlite3 构建一个 Web app。

本着不作不死的精神,今晚我又准备现场撸代码了😀 😀 😀 😀

代码先贴在这里:

# config.ru
require "erubi"
$LOAD_PATH << '.'

module Simp
  class Application
    def self.call(env)
      [200, {"Content-Type" => "html"},
       [html(env["REQUEST_PATH"][1..-1])]
      ]
    end

    def self.render(file_name)
      eval Erubi::Engine.new(
        File.read("#{file_name}.html.erb")
      ).src
    end

    def self.render_400
      "Oops, the page you visited is not exist."
    end

    def self.html(file_name)
      root_path = '/Users/i/Code/iClean/P7RubyTraining/webapp'
      file_name = File.join(root_path, file_name)
      p file_name
      if File.exist?("#{file_name}.html.erb")
        render file_name
      else
        render_400
      end
    end
  end
end

run Simp::Application

index 页面代码

# index.html.erb

<%
$LOAD_PATH << '.'
require 'model'
@students = Student.all
p @students
%>
<html>
  <head>
    <title>Simp is not a web framework.</title>
  <head>
  <body>
    <table>
      <tr>
        <td>Name</td>
        <td>Email</td>
        <td>Grade</td>
        <td>Blog</td>
      </tr>

    <% @students.each do |student| %>
      <tr>
       <td><%= student['name'] %></td>
       <td><%= student['email'] %></td>
       <td><%= student['grade'] %></td>
       <td><%= student['blog'] %></td>
      </tr>
    <% end %>
    </table>
  </body>
</html>

# model.rb

require 'sqlite3'

class Student
  # Open a database
  DB = SQLite3::Database.new "test.db"

  def self.all
    @students = []

    DB.execute( "select * from students" ) do |row|
      student = {}
      student['name'], student['email'],
      student['grade'], student['blog'] = row
      @students << student
    end

    @students
  end

end


在运行前记得先生成数据库:

require "sqlite3"

# Open a database
db = SQLite3::Database.new "test.db"

# Create a table
rows = db.execute <<-SQL
  create table numbers (
    name varchar(30),
    val int
  );
SQL

# Execute a few inserts
{
  "one" => 1,
  "two" => 2,
}.each do |pair|
  db.execute "insert into numbers values ( ?, ? )", pair
end

# Find a few rows
db.execute( "select * from numbers" ) do |row|
  p row
end

# Create another table with multiple columns

db.execute <<-SQL
  create table students (
    name varchar(50),
    email varchar(50),
    grade varchar(5),
    blog varchar(50)
  );
SQL

# Execute inserts with parameter markers
db.execute("INSERT INTO students (name, email, grade, blog) 
            VALUES (?, ?, ?, ?)", ["Jane", "[email protected]", "A", "http://blog.janedoe.com"])

db.execute( "select * from students" ) do |row|
  p row
end

在根目录下面运行:

rackup -p 3000

一个不需要框架的 Web app 就搭建完成啦。

这样直接写过 Web app 的估计年龄都差不多 38+ 了吧,我大概猜。

接下来我们会分享一下什么是 MVC。

只有懂得了这个,真正理解它们的分工才能够举一反三的做好大型软件项目的目录结构设计。

最后,进入正题,我们来分享一下 Rails 框架的组成,以及它们是怎么组合在一起的。

另外,我们也会简单介绍一下怎么读源码,让不听课的同学也能自己探索。

感兴趣的朋友可以点击以下链接参会哦:

今晚(星期三)20 点 腾讯会议

公开课吗?想听

Reply to ccmywish

公开课

Reply to rocLv

请问下次什么时间开课

新人??

如何在脑子里写垃圾?

讲得好不好不知道,就是太啰嗦,前面一大堆废话,要能直奔主流就行

Reply to xianyuit

啥时候 ruby 圈变成这样了?

你他吗是个垃圾,天天发垃圾广告。

这名用户发送了很多巨魔回复,警告一次,如果不改正将会禁言。其他人无需跟他互动。

12 Floor has deleted
13 Floor has deleted
15 Floor has deleted
You need to Sign in before reply, if you don't have an account, please Sign up first.