html - Sinatra NoMethodError at/undefined 方法 `stylesheet_link_tag' #

标签 html ruby sinatra asset-pipeline nomethoderror

我目前正在使用 sinatra 制作一个应用程序,我已经工作了几个小时来尝试在其中实现 Bootstrap ,并意识到它在 Rails 中要容易得多。

无论如何,当我运行网络服务器并转到/时,我看到一个与行 <%= stylesheet_link_tag 'app', media: 'all' %> 相关的错误我把它放在我的 app.erb View 中(我的 webapp 的索引)。这一行是为了在 assets/stylesheets 文件夹中加载一个 scss 文件,该文件包含 Bootstrap 的 @import 值。

我正在使用 sinatra-asset-pipeline gem,并且我已经根据 github 页面上的说明正确设置了它。在过去的 4 个小时里,我一直在尝试很多事情,但没有任何效果。以下是最重要文件的代码:

assets/stylesheets/app.scss:

@import "bootstrap-sprockets";
@import "bootstrap";

views/app.erb:

<!DOCTYPE html>
<html>

  <head>
    <title>Salah Kayali</title>
    <%= stylesheet_link_tag 'app', media: 'all' %>
    <%= javascript_include_tag 'app' %>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>

  <body>
    <%= partial :header %>
  </body>

</html>

app.rb:

require 'sinatra/partial'
require 'rubygems'
require 'sinatra'
# set :bind, '0.0.0.0'
require 'sinatra/asset_pipeline'

class App < Sinatra::Base
    register Sinatra::Partial
    configure do
    set :assets_precompile, %w(app.js app.scss *.png *.jpg *.svg *.eot *.ttf *.woff)
    set :assets_css_compressor, :sass
    set :assets_js_compressor, :uglifier
        register Sinatra::AssetPipeline

        if defined?(RailsAssets)
      RailsAssets.load_paths.each do |path|
        settings.sprockets.append_path(path)
      end
    end
  end

  enable :partial_underscores
    set :partial_template_engine, :erb

  get '/' do
    erb :app
  end
  run! if __FILE__ == $0
end

config.ru:

require 'rubygems'
require 'bundler'
Bundler.require
run App

Rakefile:

require 'sinatra/asset_pipeline/task'
require './app'

Sinatra::AssetPipeline::Task.define! App

gem 文件:

source "https://rubygems.org"
ruby "2.2.3"

gem 'bundler', '~> 1.10.6'

gem 'sinatra', require: 'sinatra/base'
gem 'sinatra-asset-pipeline', require: 'sinatra/asset_pipeline'

gem 'thin', '~> 1.6.4'

gem 'sass', '~> 3.4.18'

gem 'coffee-script', '~> 2.4.1'

gem 'uglifier', '~> 2.7.2'

gem 'rack-coffee', '~> 1.0.3'

gem 'sinatra-partial'

source 'https://rails-assets.org' do
  gem 'rails-assets-jquery'
  gem 'rails-assets-bootstrap-sass'
end

我真的不知道该怎么办,希望有人能帮忙。我通常习惯于 rails, Assets 管道已经存在并负责一切。不过,我强制自己用 sinatra 制作这个 webapp,这样我才能真正理解当你“自动”用 rails 创建东西时实际发生了什么。

这是我浏览器中错误输出的屏幕截图的链接:http://puu.sh/ktUIA/1d8396b034.png

最佳答案

你的问题是 stylesheet_link_tagjavascript_include_tag 是 ActionView 的一部分,ActionView 是 Rails 的底层 gem 之一(即参见 ActionView::Helpers::AssetTagHelper)。

根据 sinatra-asset-pipeline 文档:

Now when everything is in place you can use all helpers provided by sprockets-helpers

查看 sprocket-helpers 示例,您需要执行如下操作:

<link rel="stylesheet" href="<%= stylesheet_path 'application' %>">
<script src="<%= javascript_path 'application' %>"></script>

所以您正在寻找的是 stylesheet_pathjavascript_path 而不是 stylesheet_link_tagjavascript_include_tag

关于html - Sinatra NoMethodError at/undefined 方法 `stylesheet_link_tag' #,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32874843/

相关文章:

javascript - PHP 添加函数

ios - 在 Mac 中安装 Homebrew

ruby - 使用 Datamapper 在 Sinatra 中选择、复选框和单选按钮元素

ruby - 从Docker公开/发布端口

javascript - Jquery精炼表结果: two or more logic statements

html - 菜单悬停下拉

html - 带边框的 CSS 卡片,右上角有切口

ruby-on-rails - 如何找到 Rails 中链接的正确路径

ruby-on-rails - 在此机器上可用的 gem 中找不到 gem 'tzinfo-data (>=0) x86-mingw32'。运行 bundle install 以安装缺少的 gem

ruby - Sinatra 是如何定义和调用 get 方法的?