Ruby on rails 在rails 6中,我将文件夹从lib移动到/app,我可以';由于加载路径问题,似乎无法实例化对象
我有一个新的rails 6应用程序,在lib文件夹中我有以下内容: /lib/some\u app\u name/stripe/subscription/subscription\u service.rbRuby on rails 在rails 6中,我将文件夹从lib移动到/app,我可以';由于加载路径问题,似乎无法实例化对象,ruby-on-rails,ruby-on-rails-6,Ruby On Rails,Ruby On Rails 6,我有一个新的rails 6应用程序,在lib文件夹中我有以下内容: /lib/some\u app\u name/stripe/subscription/subscription\u service.rb module Someappname # Someappname is also in my application.rb module Stripe class SubscriptionService def initialize(a) @a = a
module Someappname # Someappname is also in my application.rb
module Stripe
class SubscriptionService
def initialize(a)
@a = a
end
end
end
end
然后我将“some_app_name”文件夹移动到:
/app/some\u app\u name/stripe/subscription\u service.rb
module Someappname # Someappname is also in my application.rb
module Stripe
class SubscriptionService
def initialize(a)
@a = a
end
end
end
end
我读到,/app中的任何内容都将自动加载并重新加载,所以我搬到了这里。它在/lib中也不起作用
在我的home_controller.rb中,我尝试了以下方法:
ss = Someappname::Stripe::SubscriptionService.new("a")
我得到一个错误,说:
未初始化常量Someappname::Stripe::SubscriptionService
我做错了什么?我怀疑是弹簧引起的,试试这个
bin/spring stop
然后启动rails控制台
,停止Spring将迫使rails
重新加载应用程序
另外,
如果模块名称为Someappname
,则目录名称应为app/Someappname
,而不是some\u app\u name
希望有帮助 Rails会自动加载
/app
下的所有内容,但有一个警告。第一级目录没有成为模块名称的一部分。这就是为什么在/app/models/User.rb
中可以有类用户
(而不是类模型::用户
)
解决方案:将代码放入/app
下的某个文件夹中。我通常称之为/app/lib
或/app/custom
之类的
/app/custom/some_app_name/stripe/subscription/subscription_service.rb
(是的,请确保文件路径中的名称正确表示模块路径中的名称。对于模块
Someappname
,您不能使用目录someappu\u name
,但对于Someappname
),您可以使用目录Someappname)出于好奇,您的错误跟踪是否指向zeitwerk?@jvillian不,它没有。有没有一种方法可以使用rails c进行进一步调试?@Blankman先生,您是否尝试重新启动控制台?不确定。如果将完整的错误跟踪包含在question@RajdeepSingh是的,我已重新启动,没有更改。我执行了spring停止,但没有更改,它是否以“rails s”启动?@Blankman如果您的模块名为Someappname,则目录名应为app/Someappname,而不是someapp\u name,你能试着修复吗?问题出在这里,文件夹名是“some_app_name”。我希望模块名为'SomeAppName',但只有当我有'SomeAppName'时它才起作用。有没有办法改变这一点?这看起来很奇怪…@Blankman当然,将模块名称更改为SomeAppName
,我不认为这会导致任何问题?@Blankman您只需要在名称更改后这样称呼它,SomeAppName::Stripe::SubscriptionService.new(“a”)