如何创建内联/最小Rails应用程序?

时间:2019-11-12 11:26:24

标签: ruby-on-rails

例如,use ActiveRecord inline in a Ruby script是可能的。我非常喜欢报告错误,测试功能并分享要点。

我想知道是否可以对Rails Web服务执行相同的操作? (我主要是想让控制器层正常工作,其余的应该很容易按需添加。)遵循这些原则:

begin
  require "bundler/inline"
rescue LoadError => e
  $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
  raise e
end

gemfile(true) do
  source "https://rubygems.org"

  gem 'rails', '~> 6.0.0'
end

require 'rails/commands'
APP_PATH = File.expand_path('config/application', __dir__)
Rails::Command.invoke('server')

在解决这个问题时,似乎确实需要一个外部入口点(APP_PATH)。因此,替代地,一种可接受的方法是将所有配置都塞入单个入口点。到目前为止,我无法解决这个问题。

The Rails Initialization Process是到目前为止我发现的最好的资源。

我制作了一个最小的Rails应用程序,如下所述:

rails new min-rails --skip-keeps --skip-action-mailer --skip-action-mailbox --skip-action-text --skip-active-record --skip-active-storage --skip-puma --skip-action-cable --skip-sprockets --skip-spring --skip-listen --skip-javascript --skip-turbolinks --skip-test --skip-system-test --skip-bootsnap --api
cd min-rails
rm -rf app/jobs app/models config/initializers config/locales lib log public tmp vendor config/environments/test.rb config/environments/production.rb config/credentials.yml.enc config/master.key bin/rake bin/setup bin/bundle

1 个答案:

答案 0 :(得分:0)

我以following script结尾:

inline-rails.rb

begin
  require "bundler/inline"
rescue LoadError => e
  $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
  raise e
end

gemfile(true) do
  source "https://rubygems.org"

  gem 'rails', '~> 6.0.0'
end

require "action_controller/railtie"

class App < Rails::Application
  routes.append do
    get "/hello/world" => "hello#world"
  end

  config.consider_all_requests_local = true # display errors
end

class HelloController < ActionController::API
  def world
    render json: {hello: :world}
  end
end

App.initialize!

Rack::Server.new(app: App, Port: 3000).start

运行为:

ruby inline-rails.rb