Sinatra, MySQL and ActiveRecord

2019-03-14 04:38发布

问题:

how do I set up a simple sinatra app to use MySQL and ActiveRecord? I found some solutions, but none of them worked (maybe they are outdated):

http://ericfarkas.com/posts/sinatra-activerecord-and-mysql/

http://labs.thredup.com/setting-up-sinatra-with-mysql-and-activerecor

So what is the best practise method, to use Sinatra along with MySQL and ActiveRecord? The https://github.com/janko-m/sinatra-activerecord gem is only for sqlite3, as far as I can see.

I'm not sure if I need models or just plain SQL queries. But getting it to work all together would help me a lot.

回答1:

This is a dead simple Sinatra-MySQL-ActiveRecord application. It has 2 files:

Gemfile and app.rb

Gemfile:

source :rubygems
gem 'sinatra', '1.3.1'
gem 'activerecord', '3.2.13'

app.rb

require 'rubygems'
require 'sinatra'
require 'active_record'

ActiveRecord::Base.establish_connection(
  :adapter  => "mysql2",
  :host     => "host",
  :username => "user",
  :password => "password",
  :database => "db"
)

class User < ActiveRecord::Base
end

ActiveRecord::Migration.create_table :users do |t|
  t.string :name
end

class App < Sinatra::Application
end

get '/' do
  p User.all
end
  1. Create these 2 files
  2. do bundle install (gem install bundler if you havent)
  3. ruby app.rb

You should read how to insert data using ActiveRecord. In this case, you can manually enter some data to the table from MySQL and see the output.



回答2:

You can still use sinatra-activerecord gem with MySQL and avial other features too.

Following is the way to use it:

require "sinatra/activerecord"

set :database, "mysql2://#{db_username}:#{db_password}@#{db_host}:#{db_port}/#{db_database}"

# Model
class User < ActiveRecord::Base
end 

get '/' do
  @items = User.all
  erb :index
end