/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameE

root@ubuntu10:~/up_zycg/up_zycg# ruby script/server
/usr/local/rvm/gems/ruby-1.8.7-p352/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
    from /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/activesupport-2.3.5/lib/active_support.rb:56
    from /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/rails-2.3.5/lib/commands/server.rb:1
    from /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from script/server:3


解决方法:

require 'thread'

to the top of config/boot.rb.


E:/Bitnami/redmine-5.0.3-0/ruby/bin/ruby.exe -x E:\Bitnami\redmine-5.0.3-0\apps\redmine\htdocs\bin\bundle exec E:\Bitnami\redmine-5.0.3-0\ruby\bin\ruby.exe E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/bin/rails server -b 127.0.0.1 -p 3000 -e development Beginning in Rails 4, Rails ships with a `rails` binstub at ./bin/rails that should be used instead of the Bundler-generated `rails` binstub. If you are seeing this message, your binstub at ./bin/rails was generated by Bundler instead of Rails. You might need to regenerate your `rails` binstub locally and add it to source control: rails app:update:bin # Bear in mind this generates other binstubs # too that you may or may not want (like yarn) If you already have Rails binstubs in source control, you might be inadvertently overwriting them during deployment by using bundle install with the --binstubs option. If your application was created prior to Rails 4, here's how to upgrade: bundle config --delete bin # Turn off Bundler's stub generator rails app:update:bin # Use the new Rails executables git add bin # Add bin/ to source control You may need to remove bin/ from your .gitignore as well. When you install a gem whose executable you want to use in your app, generate it and add it to source control: bundle binstubs some-gem-name git add bin/new-executable => Booting Thin => Rails 6.1.7 application starting in development http://127.0.0.1:3000 => Run `bin/rails server --help` for more startup options Exiting E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.6.1/lib/zeitwerk/loader/callbacks.rb:25:in `on_file_autoloaded': expected file E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/app/hooks/account_controller_hook.rb to define constant AccountControllerHook, but didn't (Zeitwerk::NameError) from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.6.1/lib/zeitwerk/kernel.rb:28:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies/zeitwerk_integration.rb:51:in `require_dependency' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/lib/account_lockable.rb:15:in `block in <top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/lib/account_lockable.rb:15:in `each' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/lib/account_lockable.rb:15:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/init.rb:16:in `require_relative' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/init.rb:16:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/lib/redmine/plugin_loader.rb:31:in `load' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/lib/redmine/plugin_loader.rb:31:in `run_initializer' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/lib/redmine/plugin_loader.rb:108:in `each' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/lib/redmine/plugin_loader.rb:108:in `block in load' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:427:in `instance_exec' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:427:in `block in make_lambda' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:198:in `block (2 levels) in halting' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:604:in `block (2 levels) in default_terminator' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:603:in `catch' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:603:in `block in default_terminator' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:199:in `block in halting' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:512:in `block in invoke_before' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:512:in `each' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:512:in `invoke_before' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/callbacks.rb:105:in `run_callbacks' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/reloader.rb:88:in `prepare!' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/application/finisher.rb:124:in `block in <module:Finisher>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/initializable.rb:32:in `instance_exec' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/initializable.rb:32:in `run' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/initializable.rb:61:in `block in run_initializers' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:228:in `block in tsort_each' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:431:in `each_strongly_connected_component_from' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:349:in `block in each_strongly_connected_component' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:347:in `each' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:347:in `call' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:347:in `each_strongly_connected_component' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:226:in `tsort_each' from E:/Bitnami/redmine-5.0.3-0/ruby/lib/ruby/2.6.0/tsort.rb:205:in `tsort_each' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/initializable.rb:60:in `run_initializers' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/application.rb:391:in `initialize!' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/config/environment.rb:16:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.6.1/lib/zeitwerk/kernel.rb:35:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.6.1/lib/zeitwerk/kernel.rb:35:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `block in require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:299:in `load_dependency' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require' from config.ru:3:in `block in <main>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/builder.rb:116:in `eval' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/builder.rb:116:in `new_from_string' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/builder.rb:105:in `load_file' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/builder.rb:66:in `parse_file' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/server.rb:349:in `build_app_and_options_from_config' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/server.rb:249:in `app' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/rack-2.2.4/lib/rack/server.rb:422:in `wrapped_app' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:77:in `log_to_stdout' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:37:in `start' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:144:in `block in perform' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:135:in `tap' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands/server/server_command.rb:135:in `perform' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/command/base.rb:69:in `perform' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/command.rb:48:in `invoke' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/commands.rb:18:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:59:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:59:in `block in exec_app' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:48:in `loop' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/app_loader.rb:48:in `exec_app' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/lib/rails/cli.rb:7:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/exe/rails:10:in `require' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/vendor/bundle/ruby/2.6.0/gems/railties-6.1.7/exe/rails:10:in `<top (required)>' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/bin/rails:29:in `load' from E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/bin/rails:29:in `<main>' Process finished with exit code 1
最新发布
09-10
<think> 我们遇到的问题是Zeitwerk加载器报错:期望文件`E:/Bitnami/redmine-5.0.3-0/apps/redmine/htdocs/plugins/redmine_account_lockable/app/hooks/account_controller_hook.rb`定义常量`AccountControllerHook`,但实际上没有定义。 ### 问题分析 根据错误信息,Zeitwerk自动加载机制要求文件名和常量名必须严格遵循约定: - 文件名必须是蛇形命名(snake_case) - 常量名必须是驼峰命名(CamelCase) - 文件路径必须与常量命名空间匹配 错误提示表明,文件`account_controller_hook.rb`应该定义一个名为`AccountControllerHook`的常量,但实际没有定义。 ### 解决方案 我们需要确认`account_controller_hook.rb`文件的内容,确保它定义了正确的常量。以下是修复步骤: #### 1. 检查文件内容 打开`plugins/redmine_account_lockable/app/hooks/account_controller_hook.rb`,检查是否定义了`AccountControllerHook`类。 **错误示例**(可能导致该问题的代码): ```ruby # 可能错误1:定义了不同的类名 class WrongName # ... end # 可能错误2:使用了模块而非类 module AccountControllerHook # ... end ``` **正确示例**: ```ruby class AccountControllerHook < Redmine::Hook::ViewListener # 你的代码 end ``` #### 2. 确保类名与文件名匹配 文件名:`account_controller_hook.rb` → 预期类名:`AccountControllerHook` #### 3. 如果类名正确,检查文件编码 确保文件是UTF-8编码,且没有隐藏字符(如BOM头)导致解析错误。 #### 4. 修复初始化加载顺序 在插件的`init.rb`中,确保在加载钩子之前已经加载了必要的依赖。 ### 修正后的钩子文件代码 ```ruby # plugins/redmine_account_lockable/app/hooks/account_controller_hook.rb class AccountControllerHook < Redmine::Hook::ViewListener # 确保方法名正确 def controller_account_success_authentication_after(context = {}) user = context[:user] # 例如:记录登录成功 Rails.logger.info "User #{user.login} logged in successfully." # 或者执行锁定逻辑等 # 注意:避免在此处抛出异常,否则会导致认证失败 end end ``` ### 修复插件初始化代码 在插件的`init.rb`中,避免在加载钩子文件时出现异常: ```ruby # plugins/redmine_account_lockable/init.rb require_relative 'lib/account_lockable' # 确保安全加载钩子文件 begin require_dependency 'account_controller_hook' rescue LoadError => e Rails.logger.error "AccountLockable plugin: Failed to load hook file. #{e.message}" end Redmine::Plugin.register :redmine_account_lockable do # ... 插件注册代码 ... end ``` ### 注意事项 1. **钩子类名**:必须与文件名遵循命名约定。 2. **钩子基类**:通常继承自`Redmine::Hook::ViewListener`或`Redmine::Hook::Listener`。 3. **方法签名**:钩子方法必须接收`context`参数(通常是哈希)。 ### 调试方法 在`init.rb`中添加调试代码: ```ruby Rails.logger.info "==== AccountLockable: Loading hook file ====" begin load File.expand_path('../app/hooks/account_controller_hook.rb', __FILE__) Rails.logger.info "==== AccountLockable: Hook class defined? #{defined?(AccountControllerHook)}" rescue => e Rails.logger.error "==== AccountLockable ERROR: #{e.message}" end ``` ### 完整错误处理流程 ```mermaid graph TD A[启动Redmine] --> B{加载插件} B --> C[加载redmine_account_lockable] C --> D[执行init.rb] D --> E[加载account_controller_hook.rb] E --> F{类名匹配?} F --> |是| G[正常启动] F --> |否| H[抛出Zeitwerk::NameError] H --> I[服务器退出] ``` §§相关问题§§: 1. 在Rails中,Zeitwerk自动加载的命名规则是什么? 2. 如何为Redmine插件编写钩子(Hook)? 3.Ruby中,如何解决文件编码导致的加载问题? 4. 如何调试Redmine插件的初始化过程? </think> ### 解决 Zeitwerk 加载错误问题 您的错误是由于 Zeitwerk 自动加载器无法匹配文件路径与类名导致的。以下是完整的解决方案: #### 1. 修复类名与文件名的映射关系 ```ruby # 修改文件路径或类名使其匹配 # 选项1: 修改文件路径(推荐) # 原路径: plugins/redmine_account_lockable/app/hooks/account_controller_hook.rb # 新路径: plugins/redmine_account_lockable/app/hooks/account_controller_hook/account_controller_hook.rb # 选项2: 修改类名 # 原文件: app/hooks/account_controller_hook.rb class AccountControllerHook # 保持原类名不变 # ... end # 改为: class AccountController::Hook # 匹配文件名中的命名空间 # ... end ``` #### 2. 正确配置自动加载路径 ```ruby # 在插件目录创建 engine.rb # plugins/redmine_account_lockable/lib/redmine_account_lockable/engine.rb module RedmineAccountLockable class Engine < ::Rails::Engine config.autoload_paths += [ File.expand_path("../../app/hooks", __FILE__), File.expand_path("../../app/models", __FILE__), File.expand_path("../../lib", __FILE__) ] # 禁用 Zeitwerk 自动转换 config.autoloader = :classic if Rails.version < "7" end end ``` #### 3. 修复初始化顺序问题 ```ruby # 修改 plugins/redmine_account_lockable/init.rb # 先确保引擎加载 require File.expand_path('../lib/redmine_account_lockable/engine', __FILE__) Redmine::Plugin.register :redmine_account_lockable do # ... 插件注册代码 ... end # 延迟加载钩子 Rails.application.config.after_initialize do require_dependency 'account_controller_hook' # 相对路径 # 或者在需要时才加载 unless AccountController.included_modules.include?(RedmineAccountLockable::Hook) AccountController.prepend(RedmineAccountLockable::Hook) end rescue LoadError => e Rails.logger.error "RedmineAccountLockable plugin load error: #{e.message}" end ``` #### 4. 临时禁用 Zeitwerk(仅限开发) ```ruby # config/application.rb config.autoloader = :classic # 禁用 Zeitwerk 加载器 ``` ### 根本原因分析 错误信息: ``` expected file E:/.../account_controller_hook.rb to define constant AccountControllerHook ``` 这表明: 1. Zeitwerk 期望文件 `account_controller_hook.rb` 定义 `AccountControllerHook` 类 2. 实际文件中可能定义了不同的类名或未定义类 3. 文件路径与类名不匹配 ### 验证解决方案步骤 1. **检查文件内容**: ```ruby # app/hooks/account_controller_hook.rb class AccountControllerHook # 必须是这个名称 # ... end ``` 2. **检查文件路径**: ``` 正确路径:app/hooks/account_controller_hook.rb 错误路径:app/hooks/account_controller/hook.rb ``` 3. **在控制台验证加载**: ```ruby Rails.application.reloader.require 'account_controller_hook' defined?(AccountControllerHook) # 应返回 "constant" ``` ### 备用方案:手动加载 ```ruby # 在 init.rb 中绕过自动加载器 load File.expand_path('../app/hooks/account_controller_hook.rb', __FILE__) # 然后显式引用类 AccountController.prepend(AccountControllerHook) ``` ### 目录结构调整建议 ``` redmine_account_lockable/ ├── app/ │ └── hooks/ │ └── account_controller_hook.rb # 包含 class AccountControllerHook ├── lib/ │ ├── redmine_account_lockable/ │ │ └── engine.rb # 引擎配置 │ └── account_lockable.rb # 主模块 ├── init.rb # 初始化脚本 └── config/ └── routes.rb ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值