Sinatra NoMethodError / undefined方法`stylesheet_link_tag'为#

时间:2015-09-30 20:17:07

标签: ruby sinatra asset-pipeline nomethoderror stylesheet-link-tag

我目前正在与sinatra一起制作应用程序,并且我已经工作了几个小时,试图在其中实现引导程序,并意识到它在rails中更容易。

无论如何,当我运行Web服务器并转到/时,我看到与我在app.erb视图(我的webapp的索引)中放置的行<%= stylesheet_link_tag 'app', media: 'all' %>有关的错误。此行用于在assets / stylesheets文件夹中加载scss文件,该文件包含bootstrap的@import值。

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

资产/样式表/ app.scss

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

视图/ 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

Rake文件

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

Sinatra::AssetPipeline::Task.define! App

的Gemfile

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

我希望有人可以提供帮助,因为我真的不知道该怎么做。我通常习惯于铁路,资产管道已经存在,并负责一切。不过,我强迫自己用sinatra制作这个webapp,这样我才能真正理解当你&#34;自动化&#34;用铁轨创造东西。

以下链接指向浏览器中错误输出的屏幕截图:http://puu.sh/ktUIA/1d8396b034.png

1 个答案:

答案 0 :(得分:0)

您的问题是stylesheet_link_tagjavascript_include_tag是ActionView的一部分,它是Rails基础之一(即参见ActionView::Helpers::AssetTagHelper)。

根据sinatra-asset-pipeline文档:

  

现在当一切都到位时,您可以使用提供的所有助手   链轮辅助细胞

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

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

所以你要找的是stylesheet_pathjavascript_path,而不是stylesheet_link_tagjavascript_include_tag