标签: ruby-on-rails-6

如何在Rails 6应用程序中使用Gem中的js文件

因此,我已经使用Rails已有一段时间了。但是使用Rails 6时,我真的很努力地前进。我有一些用于资产和事物的自定义gem,但我不知道如何加载js文件。

我习惯了

application.js

//= require activestorage
//= require jquery-3.3.1.min
//= require popper.min
//= require bootstrap
//= require mdb
//= require wysiwyg
//= require addons/pickr.min
//= require modules/buttons
//= require modules/cards
//= require modules/waves
//= require activestorage
//= require turbolinks
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

但这不会在Webpacker的Rails 6中加载。我无法为此找到在线的基本解决方案,该解决方案没有涉及向应用程序添加多个js文件和代码行以将解决方案修补在一起。我尝试过的是

app / javascript / packs / application.js

require("@rails/ujs").start()
require("turbolinks").start()
require ("jquery-3.3.1.min").start()
require ("popper.min").start()
require ("bootstrap").start()
require ("mdb").start()
require ("wysiwyg").start()
require ("addons/pickr.min").start()
require ("modules/buttons").start()
require ("modules/cards").start()
require ("modules/waves").start()
require("@rails/activestorage").start()
require("channels")
Run Code Online (Sandbox Code Playgroud)

资产位于gem内的正确位置(因此,rails 5应用程序中的第一个版本确实按预期加载了所有内容)。我可以在yarn中添加其中的一些,但是我想使用gem中的实际文件,而不仅仅是启动引导程序,有没有直接的解决方案?我也尝试过调整中的路径,require但这也不起作用。

谢谢你的帮助!

ruby-on-rails webpacker ruby-on-rails-6

12
推荐指数
1
解决办法
760
查看次数

Ruby on Rails 6 + Docker = Webpacker::Manifest::MissingEntryError?

尝试将我的 Rails 应用程序作为 Docker 容器运行,但在打开页面时出现以下错误:

Webpacker can't find application in /app/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}
Run Code Online (Sandbox Code Playgroud)

当我简单地运行应用程序时,rails s它工作正常,并创建了public/packs文件夹。在日志中还有

/usr/local/bundle/gems/webpacker-4.2.0/lib/webpacker/runner.rb:13:in ``': No such file or directory …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails webpack webpack-dev-server webpacker ruby-on-rails-6

12
推荐指数
1
解决办法
2086
查看次数

Rails 6.1将返回Content-Type标头,而无需进行修改...使用`#media_type`代替

当我引用此块时,此弃用消息对我意味着什么变化?

def json_response(object, status = :ok)
  render json: object, status: status
end
Run Code Online (Sandbox Code Playgroud)

编辑

消息:

Rails 6.1将返回Content-Type标头,而无需进行修改……请 #media_type改用

ruby ruby-on-rails ruby-on-rails-6

11
推荐指数
2
解决办法
880
查看次数

如何忽略 Zeitwerk for Rails 6 中的文件夹?

简单的问题,但不知何故,答案让我望而却步。

在使用 Zeitwerk 迁移到 Rails 6 时,我得到:

Please, check the "Autoloading and Reloading Constants" guide for solutions.
 (called from <top (required)> at APP_ROOT/config/environment.rb:7)
rails aborted!
Zeitwerk::NameError: wrong constant name Enforce-calls-to-come-from-aws inferred by Module from directory

  APP_ROOT/app/junkyard/enforce-calls-to-come-from-aws

Possible ways to address this:

  * Tell Zeitwerk to ignore this particular directory.
  * Tell Zeitwerk to ignore one of its parent directories.
  * Rename the directory to comply with the naming conventions.
Run Code Online (Sandbox Code Playgroud)

这看起来很棒:这是一个垃圾文件夹,永远不应加载,因此忽略它是完全有道理的。

https://github.com/fxn/zeitwerk 上的 Zeitwerk 文档说

tests = "#{__dir__}/**/*_test.rb"
loader.ignore(tests)
loader.setup …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-6

11
推荐指数
2
解决办法
3733
查看次数

如何修复弃用警告:类级别方法将不再继承 Rails 6.1 中的作用域?

最近将我的 Rails 应用程序更新到 6.0。当我运行我的测试时,我从Referral模型的范围中收到以下弃用警告:

DEPRECATION WARNING: Class level methods will no longer inherit scoping from `with_all_final_state_fulfillments` in Rails 6.1. To continue using the scoped relation, pass it into the block directly. To instead access the full set of models, as Rails 6.1 will, use `Referral.unscoped`. (called from block in <class:Referral> at /Users/home/workspace/APPNAME/app/models/referral.rb:60)
Run Code Online (Sandbox Code Playgroud)

我的Referral模型范围有问题,但写成这样:

  scope :with_all_final_state_fulfillments, lambda {
    final_state_ids = Referral.with_fulfillment_in_final_state.pluck(:id).uniq
    not_final_state_ids = Referral.where(id: final_state_ids).with_fulfillment_not_in_final_state.pluck(:id).uniq

    id_list = final_state_ids - not_final_state_ids
    Referral.where(id: id_list)
  }
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了有关如何解决此弃用问题的建议,包括 Rails GitHub …

ruby activerecord ruby-on-rails deprecation-warning ruby-on-rails-6

11
推荐指数
1
解决办法
4372
查看次数

URI::InvalidURIError(错误的 URI(不是 URI?):nil)Active Storage service_url

配置信息

rails version 6.0
ruby version 2.7.0
gem 'image_processing', '~> 1.2'
Run Code Online (Sandbox Code Playgroud)

存储.yml

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>
Run Code Online (Sandbox Code Playgroud)

发展.rb

config.active_storage.service = :local
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
Run Code Online (Sandbox Code Playgroud)

只有当我使用service= :local. 使用 AWS S3 配置,使用:amazon它可以正常工作。

用户.rb模型

  has_one_attached :avatar
  
  #throwing exception
  def avatar_urls
    {
      original: avatar.service_url
    } if avatar.attachment
  end
Run Code Online (Sandbox Code Playgroud)

访问时抛出avatar_urls异常( URI::InvalidURIError (bad URI(is not URI?): nil) )。但是,如果我将avatars_url方法更改为以下方法,则效果很好。

  #working method
  def avatar_urls
    {
      thumbnail: url_for(avatar.variant(resize: "100x100").processed)
    } …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-activestorage ruby-on-rails-6

11
推荐指数
2
解决办法
5081
查看次数

将导入地图和刺激与 Rails 6 结合使用

我目前使用的是 Rails 6.0.4,我想使用 Stimulus 构建一个新页面。在升级到 Rails 7 之前还有很多工作要做,因此如果可能的话,我想在 Rails 6 中使用导入映射和刺激。但到目前为止我还无法让刺激控制器工作。我按照以下步骤操作:

1. 更新 Gemfile 和包:

gem 'importmap-rails'
gem 'stimulus-rails'
Run Code Online (Sandbox Code Playgroud)

2. 跑步rails importmap:install

这给了我config/importmap.rb, 和app/javascript/application.js,它在配置文件中被固定为“应用程序”。

3. 重命名当前application.js文件

我的电流application.js在 inside ,所以我暂时app/assets/application.js.coffee将其重命名为并更新为以下内容:old_application.js.coffeeapplication.html.haml

= javascript_include_tag "old_application", defer: true
= javascript_importmap_tags
Run Code Online (Sandbox Code Playgroud)

这似乎有效,当我渲染页面时,它给了我以下导入映射:

{
  "imports": {
    "application": "/assets/application-920fceca960b509c1e98c9b27d167fa368d4b588ceb1be42d1667552714f94d5.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

4.运行rails stimulus:install

这给了我里面app/javascript/controllersindex.js,application.js和的文件夹hello_controller.js

它还更新config/importmap.rb为以下内容:

pin "application", preload: true
pin "@hotwired/stimulus", to: "stimulus.min.js", …
Run Code Online (Sandbox Code Playgroud)

javascript stimulusjs ruby-on-rails-6 import-maps ruby-on-rails-7

11
推荐指数
1
解决办法
3579
查看次数

Rails 6 的资产管道中不存在资产“application.js”

我正在创建一个 RoR-6 应用程序,并且从这一行的 application.html.erb 文件中抛出以下错误:

javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ActionView::Template::Error: The asset "application.js" is not present in the asset pipeline.
Run Code Online (Sandbox Code Playgroud)

该应用程序是通过运行创建的 rails new myapp -d postgres

我正在使用 Rails 6.0.0.rc1

asset-pipeline ruby-on-rails-6

10
推荐指数
1
解决办法
5600
查看次数

让 Jquery 和 Bootstrap 与 Rails 6 一起工作

我是 Rails 的新手,正在努力让 Jquery 和 Bootstrap 与 Rails 6 一起工作。我认为这与将应用程序从 rails 5 切换到 rails 6 并使用 webpacker 加载 Jquery 而不是将其作为 gem 加载有关。我已经完成了有关此操作的说明,但它似乎仍然无法正常工作。有人帮我解决了一个更具体的问题,并让我将其粘贴到视图中,然后似乎使它起作用:

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
Run Code Online (Sandbox Code Playgroud)

但是,这感觉像是一种解决方法,我希望 Jquery 在所有视图中都可用。以下是 /javascript/packs/application.js 的副本:

require("jquery")
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("bootstrap/dist/js/bootstrap")

import '../stylesheets/application'
import './bootstrap_custom.js'


//= require jquery3
//= require popper
//= require bootstrap-sprockets
Run Code Online (Sandbox Code Playgroud)

和/config/webpack/environment.js:

const { environment } = require('@rails/webpacker')

const webpack = require('webpack')
environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery/src/jquery',
    jQuery: 'jquery/src/jquery'
  })
)

module.exports = …
Run Code Online (Sandbox Code Playgroud)

jquery ruby-on-rails twitter-bootstrap webpacker ruby-on-rails-6

10
推荐指数
1
解决办法
4525
查看次数

无法解密 config/credentials.yml.enc。也许你传错了钥匙?

我最近删除了我的本地项目,但做了一个 git clone 并从我上次提交的地方开始。当我尝试将图像上传到已配置的 AWS 时,出现以下错误:

Aws::Sigv4::Errors::MissingCredentialsError in RentalsController#create


Cannot load `Rails.config.active_storage.service`: missing credentials, provide credentials with one of the following options: - :access_key_id and :secret_access_key - :credentials - :credentials_provider
Run Code Online (Sandbox Code Playgroud)

我试图查看我的credentials.yml文件是否有任何错误,但是当我输入此命令时:

EDITOR="code --wait" rails credentials:edit
Run Code Online (Sandbox Code Playgroud)

...我收到此错误:

Couldn't decrypt config/credentials.yml.enc. Perhaps you passed the wrong key?
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

ruby-on-rails amazon-s3 amazon-web-services ruby-on-rails-6

10
推荐指数
1
解决办法
5851
查看次数